返回

正则表达式测试

//
HIGHLIGHTED RESULT

工具介绍

左边写正则和标志,右边贴待测文本,页面用浏览器的 RegExp 实时列出匹配。它适合调试将要放进 JavaScript 的表达式,不能保证和 Python、Java 或 grep 的结果一致。

模式字符串直接传给 new RegExp,不要再包一层斜杠。默认标志是 g。带 g 时从左到右找全部匹配;若某次匹配是空字符串,lastIndex 会加 1,避免死循环。不带 g 时只返回第一处。每个结果包含匹配文本、起始下标,以及括号捕获组。可选标志还有 i、m、s、u、y。

计算示例

  1. 输入:模式 \d{4}-\d{2}-\d{2},标志 g,文本「开始 2024-01-01,结束 2024-02-01。」

    输出:两处:2024-01-01(下标 3)、2024-02-01(下标 17)

  2. 输入:模式 (\w+)@([\w.]+),标志 g,文本「写给 ada@example.com 和 bob@test.cn」

    输出:ada@example.com 的组是 ada 与 example.com;bob@test.cn 的组是 bob 与 test.cn

  3. 输入:模式 cat,标志 gi,文本「Cat cat CAT」

    输出:Cat、cat、CAT 三处都命中

使用限制

  • 引擎是 JavaScript。可变长度的回顾后发、部分占有量词,这里不能用。
  • \w 在没有 u 标志时只含 ASCII 的字母、数字和下划线,不包含汉字。
  • 页面不执行替换,只显示匹配。

常见错误

  • 把 /abc/g 整段贴进模式框。斜杠会被当成要匹配的字符,g 也不会变成标志。
  • 忘了勾 g,于是只看到第一处,以为后面的没有匹配。
  • 在别的语言里能用的 \p{Han},这里必须同时带 u 标志。

常见问题

下标从 0 开始吗?▾
是。第一例里「开始」占两个字符,再加一个空格,所以第一段日期从下标 3 开始。
分组怎么看?▾
圆括号按从左到右编号,结果里的 groups 就是这些括号抓到的文本,不含整个匹配本身。
为什么复杂表达式会卡?▾
有些写法会让引擎大量回溯。页面在主线程里执行,过长的文本加上含糊的 .* 可能让标签页卡住。