开发者工具

正则表达式测试与解释

写正则最难的是看不见它到底匹配了什么。在这里输入正则和测试文本,每个匹配会实时高亮,捕获组的内容列成表格,替换结果也能先看一眼;下方还会把正则拆成一小段一小段,用中文说明每段的意思。

匹配与捕获组
替换
逐段解释

    全部在你的浏览器里运行,这里输入的内容不会上传。

    怎么用

    1. 在「正则表达式」里输入正则,不需要写两边的斜杠。下面勾选标志,最常用的是 g(全部匹配)和 i(忽略大小写)。
    2. 在「测试文本」里粘贴要匹配的内容。匹配的部分会实时高亮,相邻的两处匹配用不同颜色区分;零长度匹配显示为一条竖线。
    3. 「匹配与捕获组」表格列出每一处匹配的位置、内容,以及每个捕获组和命名组捕获到的文字。
    4. 展开「替换」,输入替换内容就能看到替换后的全文,可以用 $1、$2 引用分组,用 $<名字> 引用命名组,用 $& 引用整个匹配。
    5. 「逐段解释」把正则拆开,一段一段说明含义。不确定一个现成的正则是什么意思时,贴进来看这里最快。

    按什么规则匹配

    JavaScript 的正则语法

    本工具直接使用浏览器的 JavaScript 正则引擎,结果和你在网页、Node.js 里写代码时完全一致。各个标志的含义见 MDN 的正则指南:g 找出全部匹配,否则只找第一个;i 忽略大小写;m 让 ^ 和 $ 匹配每一行的开头和结尾,而不只是整段文本的开头和结尾;s 让 . 也能匹配换行;u 按 Unicode 码点处理,支持 \p{…} 这样的属性转义;y 要求从上一次结束的位置紧接着匹配。其他语言(Python、Java、PCRE)的正则大体相同,但细节有差别,比如后行断言和命名组的写法,拿到别处用之前最好再测一次。

    中文用户最常踩的坑:\w 不含汉字

    按 MDN 的说明,\w 只包括 A–Z、a–z、0–9 和下划线,所以 \w+ 在「中文abc」里只能匹配到 abc。要匹配汉字,打开 u 标志,用 \p{Script=Han};常用模式里的「连续的汉字」就是这么写的。同理,\b 单词边界也是按同样的「单词字符」判断的:两个汉字之间没有单词边界,所以 \b 没法用来切分中文词语。

    零长度匹配

    像 a* 这样可以匹配空字符串的正则,在「baaa」里会匹配三次:位置 0 的空串、位置 1 的 aaa、位置 4 的空串。工具在遇到空匹配时会主动前进一个字符(打开 u 标志时前进一个完整的码点,不会把表情符号劈成两半),所以不会卡在原地;表格里能看到这些空匹配的位置。

    为什么有时会提示「执行超时」

    有些正则在匹配失败时会尝试天文数字般的组合,这叫灾难性回溯。OWASP 的说明里举的例子是 ^(a+)+$:输入每多一个 a,要尝试的路径就翻一倍。这种正则一旦进了生产环境,一条恶意输入就能拖垮服务。本工具把正则放在后台线程里执行,超过 1.5 秒就停止并提示你,页面不会卡死。看到这个提示,最好改写正则,去掉嵌套的量词。

    常用模式从哪里来

    邮箱用的是 HTML 规范给出的正则,也就是浏览器判断 <input type=email> 是否有效的标准。它比 RFC 5322 允许的地址严格,但覆盖了实际使用的几乎所有邮箱。UUID 按 RFC 9562 的文本格式:8-4-4-4-12 个十六进制字符。其余几个(IPv4、日期、颜色、手机号、网址)是常见写法,只检查格式,不检查含义,例如日期模式会接受 2026-02-31。

    示例

    正则标志文本结果
    \d+ga1 b22 c3331、22、333
    (?<year>\d{4})-(\d{2})g2026-09 and 2027-01两处;year 组分别是 2026 和 2027
    a*gbaaa位置 0 空串、位置 1 aaa、位置 4 空串
    \w+g中文abc只有 abc
    \p{Script=Han}+guabc中文def中文

    替换示例:正则 (\w+)@(\w+),替换为 $2 at $1,文本「a@b c@d」变成「b at a d at c」。命名组也一样:(?<y>\d{4}) 替换为 [$<y>],2026 变成 [2026]。

    局限

    • 只支持 JavaScript 语法。Python 的 (?P<name>…)、PCRE 的占有量词和递归等写法会报错或含义不同。
    • 高亮最多显示前 1000 处匹配,表格最多列出 200 行,但总数照常统计。
    • 逐段解释覆盖常见语法;非常复杂的正则,解释只到单个记号这一层,不会分析整体意图。
    • 常用模式只检查格式。要判断邮箱能不能收信、日期是否存在,还需要别的校验。

    常见问题

    为什么 \w 匹配不到中文?

    在 JavaScript 里 \w 只包括 A–Z、a–z、0–9 和下划线。匹配汉字请打开 u 标志,用 \p{Script=Han}。

    正则两边要写斜杠吗?

    不用。斜杠只是 JavaScript 源代码里的写法,标志在下面单独勾选。

    替换里怎么引用分组?

    用 $1、$2 引用第几个分组,用 $<名字> 引用命名组,用 $& 引用整个匹配。

    为什么提示执行超时?

    正则可能在反复回溯,常见于 (a+)+ 这类嵌套量词。工具在 1.5 秒后停止,避免页面卡死。

    我的文本会上传吗?

    不会。匹配在浏览器的后台线程里完成。

    参考资料

    ↵ 打开 · Esc 关闭