首页 / 文本与开发 /

Regex Pro · 可视化正则

⭐ 觉得好用?收藏备用,下次直接打开
/
/
等待输入 |
常用:
参考手册 点击分类筛选 · 点条目插入
测试文本
命中 等待输入
输入正则和文本后实时显示匹配列表

Regex Pro 是对标 regex101 的进阶版浏览器内正则工具——pattern 实时语法着色、AST 中文解释、命名组捕获、替换预览、大文本 grep 模式,全部本地运行,不上传服务器。

它解决的问题

普通”正则测试”工具的痛点:

  • 看不懂别人写的正则(?<=\$)(?:\d{1,3},)*\d{1,3}(?:\.\d{2})? 这种没解释根本读不下去
  • 大文本卡死浏览器:粘几百 KB 日志直接画面冻住、风扇起飞
  • 替换模板靠脑补$1 / $<name> 究竟会输出什么,要打开 console 才能验证
  • 灾难性回溯把整个 tab 冻住:写错一个 (a+)+ 跑长串就得强制刷新

Regex Pro 把上述都拍平了。

核心特性

能力说明
语法着色pattern 输入框上方覆盖层把元字符 / 量词 / 分组 / 字符类 / 转义按颜色区分,调试一眼定位
AST 解释解析为抽象语法树后逐节点输出中文描述,分组/断言带层级缩进
实时匹配输入即跑,状态栏显示命中数 + 耗时(毫秒)
命名捕获(?<name>...) 在匹配列表里按名字展示,对应 $<name> 替换模板
替换预览独立 tab,$1 / $& / $<name> / $\`` / $’` 全套支持
大文本降级>200KB 自动切换为 grep 列表模式,每条命中带 ±30 字符上下文
Worker 超时匹配在 Web Worker 跑,2.5s 不返回就 terminate,主线程永不卡
一键导出复制为 JS / Python / Java 代码片段(自动处理转义和命名组方言差异)

适用 vs 不适用

适用:

  • 调试要上生产的正则、读懂遗留代码里的正则、批量替换日志/源码
  • 在 200KB ~ 2MB 量级文本里做一次性 grep 提取

不太适用:

  • 需要 PCRE 独有特性(原子组 / 占有量词 / 递归 / 条件分组)——这些 JavaScript 引擎不支持
  • 几十 MB 以上的超大文件——浏览器内存吃紧,建议用 ripgrep / grep -P 这类原生工具

数据安全

整套工具完全本地运行,不发起任何网络请求。pattern / 测试文本 / 替换模板都只存在浏览器 localStorage 和当前页面 DOM 里,刷新关闭就消失。可放心粘贴日志、源码、机密 ID 做调试。

📍使用场景

  • 读懂别人写的"天书"正则粘进去打开"解释"面板,AST 逐段中文翻译,分组/量词/断言层级一目了然。
  • 大日志里 grep 字段200KB+ 的日志拉进来也不卡,命中按列表 + 上下文展示,点击可定位原位置。
  • 调试替换模板$1 / $<name> / $& 实时预览,命名组替换不再凭脑补,复制即可用。
  • 排查回溯卡死的正则内置 Web Worker + 2.5s 超时,遇到 `(a+)+` 这类灾难性回溯不会冻住页面。

常见问题

和现有的"正则测试"工具有什么区别?

"正则测试"是轻量快测:粘正则 + 文本看高亮,速度优先。Regex Pro 多了:① 语法着色——pattern 输入框里量词/分组/字符类按颜色区分;② AST 中文解释面板——逐段翻译成人话;③ 替换模板预览;④ 大文本支持(>200KB 自动切换 grep 列表模式);⑤ Web Worker 超时保护(避免灾难性回溯卡死)。日常快测用 regex,吃不下的复杂场景上 regex-pro。

支持哪些正则方言?

当前 v1 是 JavaScript / ECMAScript 方言(浏览器原生 RegExp)。常用语法 \d \w \s / 字符类 / 量词 / 命名捕获 (?<name>...) / 回引 \k<name> / 前后瞻 (?=) (?!) (?<=) (?<!) 都支持。不支持的 PCRE 特性:原子组 (?>...)、占有量词 a++、递归 (?R)、条件分组 (?(1)yes|no)。如果你的 pattern 来自 Python / Java / PHP,多数语法兼容,但 Python 命名组 (?P<name>) 需要先改成 JS 写法。

"解释"面板里的层级缩进怎么读?

每一行是 AST 上的一个节点。最左侧的点表示嵌套深度——分组 (...)、断言 (?=...)、交替分支会让子节点缩进一级。读法:从上到下、从浅到深,配合右侧"原始片段"列对照 pattern 中的位置。比如 (\d{4})-(\d{2}) 会展开成"第 1 个捕获组 → 数字(重复 4 次)"和"第 2 个捕获组 → 数字(重复 2 次)"。

大文本(几百 KB / 几 MB)会卡吗?

不会页面卡死,但会自动降级显示。≤200KB:pattern 输入旁的测试文本框做完整内联高亮;>200KB:关闭内联高亮,只在下方"匹配列表"里展示每个命中带 ±30 字符的上下文,点击列表项可在原 textarea 里定位。匹配引擎在 Web Worker 里跑,2.5 秒不返回就 terminate 重启 Worker,主线程永远不卡。

替换字符串里 $1、$<name>、$& 等占位符各是什么意思?

都是 JavaScript String.replace 的标准替换占位符:$& 是整个匹配、$1$99 是第 N 个捕获组、$<name> 是命名捕获组、$$ 是字面 $。另外还有两个 less-used 的:dollar+反引号引用匹配之前的内容,dollar+单引号引用匹配之后的内容。例:(\d{4})-(\d{2})$1年$2月2026-05 替换成 2026年05月;命名组版本 $<year>年$<month>月 等价。

为什么我的 pattern 在"语法错误"红条里报错?

红条直接显示浏览器抛的 SyntaxError,常见原因:① 未闭合的括号/字符类——(abc[a-z;② 量词位置错误——*abc 开头量词没东西可重复;③ \u/\x 后跟的不是合法 hex;④ 命名组名字重复或为空。建议参考"参考手册"折叠面板里的语法元素列表,点击即插入。

灾难性回溯(Catastrophic Backtracking)是什么?怎么避免?

形如 (a+)+(a|a)+(.*)* 这种嵌套无界量词碰到长串不匹配输入时,回溯路径会指数级爆炸——几秒到几分钟不出结果。Regex Pro 的 Worker 2.5 秒超时只是兜底,治本要改写 pattern:① 把嵌套量词扁平化(a+ 代替 (a+)+);② 用占有量词或原子组(JS 不支持,可改业务逻辑);③ 用具体字符类代替 .*[^"]* 代替 .* 提取引号内容)。Cloudflare 2019 年宕机就是这个问题。

我能把测试好的正则导出到代码里直接用吗?

能。pattern 输入框旁有 JS / Py / Java 三个复制按钮:JS 复制 /pattern/flags 字面量;Python 复制带 import rere.findall 的片段,且自动把 (?<name>) 改成 (?P<name>);Java 复制 Pattern.compile(...) 调用并把反斜杠/双引号转义。注意:Python / Java 的字符类边界、Unicode 行为略有差异,导出后建议用一组真实数据验证一次。