怎么用
- 在「正则表达式」里输入正则,不需要写两边的斜杠。下面勾选标志,最常用的是 g(全部匹配)和 i(忽略大小写)。
- 在「测试文本」里粘贴要匹配的内容。匹配的部分会实时高亮,相邻的两处匹配用不同颜色区分;零长度匹配显示为一条竖线。
- 「匹配与捕获组」表格列出每一处匹配的位置、内容,以及每个捕获组和命名组捕获到的文字。
- 展开「替换」,输入替换内容就能看到替换后的全文,可以用 $1、$2 引用分组,用 $<名字> 引用命名组,用 $& 引用整个匹配。
- 「逐段解释」把正则拆开,一段一段说明含义。不确定一个现成的正则是什么意思时,贴进来看这里最快。
按什么规则匹配
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+ | g | a1 b22 c333 | 1、22、333 |
| (?<year>\d{4})-(\d{2}) | g | 2026-09 and 2027-01 | 两处;year 组分别是 2026 和 2027 |
| a* | g | baaa | 位置 0 空串、位置 1 aaa、位置 4 空串 |
| \w+ | g | 中文abc | 只有 abc |
| \p{Script=Han}+ | gu | abc中文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 秒后停止,避免页面卡死。
我的文本会上传吗?
不会。匹配在浏览器的后台线程里完成。