这个工具做什么
正则测试工具回答一个具体的问题:「这条正则在这段文本里到底匹配了什么」。把正则本体(不带 / / 定界符)和测试文本粘进来,立刻看到每个匹配在原文中的位置、命中的原文,以及各个捕获组抓到的内容。
它最大的价值在出错的时候:正则写错了,页面会给出 JavaScript 引擎的原始报错——比如「未闭合的分组」「无效的转义」——并定位到问题,而不是让你对着一段没有反应的文本框猜。
如何使用
- 第一步:填正则 只填表达式本体,不要带前后斜杠:写 \d+ 而不是 /\d+/。标志位(g、i、m……)单独填在下一栏,g 表示找出全部匹配,不加 g 只会列出第一个。
- 第二步:贴测试文本 把你实际要处理的那段文本贴进来——日志、接口返回、HTML 片段都可以。样本越接近真实数据,结果越有参考价值。
- 第三步:读报告 报告第一行是匹配总数,随后每条形如 [1] 0-11: "hello world",方括号是起止下标(含头不含尾),下面的缩进行是 $1、$2 各捕获组的内容。调试「为什么多了个空匹配」时,重点看相邻两条的位置是否相同。
限制与边界
语义是 JavaScript RegExp,与 PCRE / Python / Go 并不完全一致:命名组写法、递归、占有优先量词等支持度不同,跨语言移植前请以目标语言的文档为准。输入上限 1MB(刻意收紧);不做替换 / 分割预览,不做语法可视化与回溯步数统计。正则匹配没有超时——靠 1MB 上限与取消按钮兜底。
常见问题
为什么只匹配到第一个?
因为标志位里没有 g。g 表示全局(找出全部匹配),去掉它就只找第一个——这与 JavaScript 的行为一致,方便你验证「不加 g 会怎样」。
捕获组没匹配上会显示什么?
显示「(未参与)」。比如 (x)?b 匹配 "b" 时,x 组没有参与匹配,报告中对应行就是 (未参与),这与 JS 里 group 为 undefined 一致。
正则明明对,为什么报无法编译?
常见原因:带了前后斜杠(/\d+/ 应写成 \d+)、忘了转义(. 要写成 \.)、或用了 JS 不支持的语法(如 PCRE 的 (?>…))。报错信息里会带 JS 的原始提示,按它定位即可。
大文本会卡住吗?
输入上限 1MB,正常模式(日志、接口返回)都在毫秒级完成。但灾难性回溯无法被浏览器中断——如果写了 (a+)+ 这类模式并贴入特定文本,Worker 会一直算,这时点「取消」终止即可。
支持命名捕获组吗?
支持((?<year>\d{4})),报告中编号组与命名组都会列出,命名组显示为 $<year>。跨语言时注意命名组语法在 PCRE 里写作 (?P<year>…),不完全一致。
页面会把我的正则和数据发出去吗?
不会。匹配在浏览器内的独立 Worker 里执行,页面不发出包含正则或文本的请求。调试包含内网地址、密钥样式的正则也不会泄露。