正则测试
正则表达式是一小段描述「文本长什么样」的模式:用它去大段文字里找出符合形状的部分。写对模式能一眼定位邮箱、日期、报错编号,但正则可读性差、差一个符号结果就变。这页给你一个即时反馈的实验台——把模式和文本摆在一起,看着它到底匹配了什么。
它跑的是浏览器内建的脚本正则引擎,也就是很多脚本语言里那个对象,不是你从别处抄来的、带额外语法的那一套。页面上提供四个开关位,匹配结果实时高亮,命中列表和捕获分组一并列出,还能试替换后的样子。
适合边写边验证:想知道某个模式在你的文本上会不会误伤、贪婪量词多吃了哪些字符、分组捕获到的到底是哪几段、替换串里的编号有没有正确回填——都在这页当场看出来,不用回到代码里跑一遍。
怎么用
- 写模式在最上面两斜杠之间的框里填正则(占位「输入正则表达式」)。这里只写斜杠中间的部分,不用自己再加外层的定界斜杠;框里预置了一个找邮箱的示例可直接改。
- 加开关右侧四个勾选对应 g、i、m、s 四个标志:g 全局找所有、i 忽略大小写、m 让起止锚按每一行、s 让点号也能匹配换行。勾上才会拼进模式,都不勾就只匹配第一处且区分大小写。
- 喂文本在「测试文本」框里放要被搜的内容(已预置一行带几个邮箱的示例)。改文本、改模式、改开关,下面的结果都会立刻跟着变,不需要点任何运行按钮。
- 看高亮「匹配高亮」把命中的片段用底色标出来,旁边标着命中了几处;没命中就整段照常显示。某处匹配到空内容时会画一个空记号占位。
- 读分组模式里有捕获组时会列出「捕获分组」表:每行给位置、完整匹配内容、以及各个分组捕获到的部分,没捕获到显示空记号。用括号分组、想拆开各部分时靠它确认取对了。
- 试替换「替换预览」里填替换串(可用编号引用分组、用特殊符引用整段匹配),下面即时显示替换后的完整文本,方便检查有没有替错范围或漏替。
深入一点
不加 g 就只碰第一处
这是最容易忽略的行为:模式没带 g 标志时,引擎只找第一个匹配就停,高亮也只标那一处。要一次性标出全部,务必勾上 g。带 g 时循环到没有更多匹配为止,并对「匹配到空」的情况强制前进一位,避免原地打转。
页面对命中数量还设了上限,极端的模式配上超长文本会提前停,防止一个能匹配空串的全局模式把页面卡死。
所以调试时先把 g 勾上、确认能命中几处,再决定要不要去掉,别误以为模式只匹配到一个。
四个开关各管一件事
g 全局、i 忽略大小写、m 把每行首尾都当成锚点、s 让点号连换行也吃。这几个是脚本正则里最常用的;像按码点处理、粘性匹配这类本页没给开关,需要就得回代码里写完整的正则对象。
模式本身不合法(括号不配对、量词位置不对)时,顶部会出「表达式错误」,高亮退回纯文本、命中清零,等改对了再恢复。
想知道某个开关到底改变了什么,最省事的办法是只动它一下,盯着高亮区哪里多了或缺了标记。
脚本正则不等于别的方言
从别处抄的模式未必直接可用:这页用的是浏览器引擎,字符类转义、断言的支持范围、某些特殊写法都可能和你熟悉的其它方言不同。拿不准就照本页实际跑出的高亮为准。
替换串的引用语法是字符串替换那一套(编号引用分组、特殊符引用整段),和某些语言用反斜杠加数字的写法不一样,别把两种记法混用。
同一个模式换到本页跑出不同结果很正常,一切以眼前的高亮和命中数为准,别照搬别处的结论。
注意事项
- 全部匹配都在浏览器本地进行,测试文本不上送服务器。
- 结果随模式、文本、开关实时重算,没有单独的运行按钮。
- 只匹配浏览器的正则语法,不保证兼容其它方言的写法。
- 高亮区只用来展示命中范围,不能直接从上面编辑文本,改动仍回到「测试文本」框。
- 替换预览不会真的改走原文,它只演示结果,原样文本一直留在测试框里。
- 模式为空时不产生命中,高亮就是纯文本本身。