在线正则表达式测试

输入正则与测试文本,实时查看匹配位置与捕获组;写错的正则会给出具体报错。

文件不上传 .txt 单文件最大 1MB
文件不上传

参数

此项为必填,不能为空

直接写表达式本体,标志位放在下面一栏。

g=全部匹配;不加 g 只找第一个。允许 g i m s u y d。

这个工具做什么

正则测试工具回答一个具体的问题:「这条正则在这段文本里到底匹配了什么」。把正则本体(不带 / / 定界符)和测试文本粘进来,立刻看到每个匹配在原文中的位置、命中的原文,以及各个捕获组抓到的内容。

它最大的价值在出错的时候:正则写错了,页面会给出 JavaScript 引擎的原始报错——比如「未闭合的分组」「无效的转义」——并定位到问题,而不是让你对着一段没有反应的文本框猜。

如何使用

  1. 第一步:填正则 只填表达式本体,不要带前后斜杠:写 \d+ 而不是 /\d+/。标志位(g、i、m……)单独填在下一栏,g 表示找出全部匹配,不加 g 只会列出第一个。
  2. 第二步:贴测试文本 把你实际要处理的那段文本贴进来——日志、接口返回、HTML 片段都可以。样本越接近真实数据,结果越有参考价值。
  3. 第三步:读报告 报告第一行是匹配总数,随后每条形如 [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 里执行,页面不发出包含正则或文本的请求。调试包含内网地址、密钥样式的正则也不会泄露。

相关工具