正则表达式在线测试:标志、高亮与起止下标
正则调试慢,多半是因为看不见中间结果。把「匹配到了什么、从第几位到第几位、每个组捕获了什么」逐条列出来,比在代码里打一堆 log 快得多。
六种标志各管什么
- g(global):查找所有匹配,不加只返回第一个。
- i(ignoreCase):忽略大小写。
- m(multiline):
^与$匹配每行开头结尾,而不是整段文本的开头结尾。 - s(dotAll):
.匹配换行符。默认.不匹配换行,这是「跨行匹配失败」最常见的原因。 - u(unicode):按码点处理,支持
\p{...}属性转义,正确处理 4 字节字符(Emoji、生僻字)。 - y(sticky):从
lastIndex位置严格开始匹配,不往后找。
组合顺序无关,但 g 与 y 同时开时行为由 y 主导。
起止下标怎么用
每条结果都给出匹配文本在原文中的起止下标(index 与 index + length)。这是把正则结果映射回原文的关键——比如要高亮、要截取上下文、要定位第几次出现。
注意下标是按 UTF-16 码元计的,不是按「字符」。一个 Emoji 占两个码元,所以含 Emoji 的文本里下标与肉眼数的位置会对不上。开 u 标志能让匹配按码点处理,但 index 仍是码元偏移。
替换预览里的引用
替换文本支持 $1、$&、$<名字> 等引用:
$1:第 1 个捕获组。$&:整个匹配。$<year>:命名组year。$$:一个字面量$。
替换结果实时预览,改一个字就能看到效果,不用先跑一遍代码。
非法表达式会给出原始错误
正则写错时(括号不配对、量词位置不对、字符类未闭合),工具给出的是浏览器原始的错误说明,而不是笼统的「正则无效」。
这一点很重要:不同引擎对同一段非法正则的报错不同,看到浏览器原文才能对上你在代码里遇到的错误。
上面这些都不用装软件,也不用注册:打开页面就能用。
打开正则表达式测试器 →常见问题
为什么 . 匹配不到换行?
这是规范行为:默认 . 不匹配换行符。要跨行匹配请开 s(dotAll)标志,或用 [\s\S] 这类显式字符类。
为什么 ^ 和 $ 只匹配了整段的首尾?
没有开 m(multiline)标志。开启后 ^ 与 $ 才会匹配每一行的开头与结尾。
测试文本有长度限制吗?
上限 20 万字符,匹配结果最多收集 10000 条,超出会明确告诉你已截断,而不是给一个看起来完整的错误数字。