正则测试

把正则和测试文本摆在一起,实时高亮命中、列出捕获分组并预览替换结果。

/
/
测试文本
匹配高亮 4 处
联系 admin@xmi4.com 或 support@Example.COM,抄送 dev_team@mail.io。 第二行 hi@there.co
捕获分组
#
位置
匹配内容
分组
1
3
admin@xmi4.com
—
2
20
support@Example.COM
—
3
43
dev_team@mail.io
—
4
65
hi@there.co
—
替换预览
联系 [admin@xmi4.com] 或 [support@Example.COM],抄送 [dev_team@mail.io]。 第二行 [hi@there.co]

正则测试

正则表达式是一小段描述「文本长什么样」的模式:用它去大段文字里找出符合形状的部分。写对模式能一眼定位邮箱、日期、报错编号,但正则可读性差、差一个符号结果就变。这页给你一个即时反馈的实验台——把模式和文本摆在一起,看着它到底匹配了什么。

它跑的是浏览器内建的脚本正则引擎,也就是很多脚本语言里那个对象,不是你从别处抄来的、带额外语法的那一套。页面上提供四个开关位,匹配结果实时高亮,命中列表和捕获分组一并列出,还能试替换后的样子。

适合边写边验证:想知道某个模式在你的文本上会不会误伤、贪婪量词多吃了哪些字符、分组捕获到的到底是哪几段、替换串里的编号有没有正确回填——都在这页当场看出来,不用回到代码里跑一遍。

怎么用

  1. 写模式在最上面两斜杠之间的框里填正则(占位「输入正则表达式」)。这里只写斜杠中间的部分,不用自己再加外层的定界斜杠;框里预置了一个找邮箱的示例可直接改。
  2. 加开关右侧四个勾选对应 g、i、m、s 四个标志:g 全局找所有、i 忽略大小写、m 让起止锚按每一行、s 让点号也能匹配换行。勾上才会拼进模式,都不勾就只匹配第一处且区分大小写。
  3. 喂文本在「测试文本」框里放要被搜的内容(已预置一行带几个邮箱的示例)。改文本、改模式、改开关,下面的结果都会立刻跟着变,不需要点任何运行按钮。
  4. 看高亮「匹配高亮」把命中的片段用底色标出来,旁边标着命中了几处;没命中就整段照常显示。某处匹配到空内容时会画一个空记号占位。
  5. 读分组模式里有捕获组时会列出「捕获分组」表:每行给位置、完整匹配内容、以及各个分组捕获到的部分,没捕获到显示空记号。用括号分组、想拆开各部分时靠它确认取对了。
  6. 试替换「替换预览」里填替换串(可用编号引用分组、用特殊符引用整段匹配),下面即时显示替换后的完整文本,方便检查有没有替错范围或漏替。

深入一点

不加 g 就只碰第一处

这是最容易忽略的行为:模式没带 g 标志时,引擎只找第一个匹配就停,高亮也只标那一处。要一次性标出全部,务必勾上 g。带 g 时循环到没有更多匹配为止,并对「匹配到空」的情况强制前进一位,避免原地打转。

页面对命中数量还设了上限,极端的模式配上超长文本会提前停,防止一个能匹配空串的全局模式把页面卡死。

所以调试时先把 g 勾上、确认能命中几处,再决定要不要去掉,别误以为模式只匹配到一个。

四个开关各管一件事

g 全局、i 忽略大小写、m 把每行首尾都当成锚点、s 让点号连换行也吃。这几个是脚本正则里最常用的;像按码点处理、粘性匹配这类本页没给开关,需要就得回代码里写完整的正则对象。

模式本身不合法(括号不配对、量词位置不对)时,顶部会出「表达式错误」,高亮退回纯文本、命中清零,等改对了再恢复。

想知道某个开关到底改变了什么,最省事的办法是只动它一下,盯着高亮区哪里多了或缺了标记。

脚本正则不等于别的方言

从别处抄的模式未必直接可用:这页用的是浏览器引擎,字符类转义、断言的支持范围、某些特殊写法都可能和你熟悉的其它方言不同。拿不准就照本页实际跑出的高亮为准。

替换串的引用语法是字符串替换那一套(编号引用分组、特殊符引用整段),和某些语言用反斜杠加数字的写法不一样,别把两种记法混用。

同一个模式换到本页跑出不同结果很正常,一切以眼前的高亮和命中数为准,别照搬别处的结论。

注意事项

  • 全部匹配都在浏览器本地进行,测试文本不上送服务器。
  • 结果随模式、文本、开关实时重算,没有单独的运行按钮。
  • 只匹配浏览器的正则语法,不保证兼容其它方言的写法。
  • 高亮区只用来展示命中范围,不能直接从上面编辑文本,改动仍回到「测试文本」框。
  • 替换预览不会真的改走原文,它只演示结果,原样文本一直留在测试框里。
  • 模式为空时不产生命中,高亮就是纯文本本身。

常见问题

为什么明明匹配到好几处却只标了一个

多半没勾 g。没有全局标志时引擎只取第一处,勾上 g 才会把每一处都标出来。

i 和 m 分别什么时候用

i 用于不分大小写的查找,比如同时想命中大写和小写写法;m 用于多行文本里让行首行尾的锚按每一行生效,否则它们只认整段的头和尾。

捕获分组那个空记号是什么意思

表示这个分组在这次匹配里没取到内容,引擎给了空占位。常见于可选分组、或分支只走了一边的情况。

整段引用和分组引用有何不同

整段引用代表被匹配到的全部文本,分组引用代表第一个括号捕获的部分。替换时想原样保留整段用前者,想重排各部分用后者。

s 标志有什么用

默认点号不匹配换行符;勾上 s 后点号也能吃换行,适合用一条模式跨多行抓取一整块内容。

为什么我的模式在这里报错

可能是括号、方括号或量词写得不合本机语法,也可能用了别的方言才支持的写法。按「表达式错误」的提示回到本页语法改。

能匹配中文吗

可以,中文也是普通字符参与匹配;但涉及按码点处理、组合字符等要小心,本页没有对应开关,复杂匹配未必准。

零宽匹配会不会把页面卡死

不会,遇到匹配长度为零的情况引擎会强制前进一个位置,且对总命中数设了上限,避免无限循环。

位置那一列是从几开始算

从命中片段在测试文本中的字符下标起算,起点为零;它帮你定位命中出现在文本靠前的哪里。

为什么改了开关结果没变

可能那个标志在当前模式里本就不起作用,比如模式里没有行首行尾锚时勾与不勾 m 看不出差别,也没有大小写混写的字母时 i 无效果。

注册后可收藏工具、跨设备同步最近使用。