⭐ 觉得好用?收藏备用,下次直接打开
正则表达式
FLAGS
示例:
🛤️ 流程图
💡 拖拽空白处平移 · /Ctrl + 滚轮缩放
📖

正则铁路图(regex railroad diagram) 把一段正则表达式渲染成可视化流程图——字符是站点、分组是子图、量词是循环回路、| 是分叉,整条匹配过程像一条铁路一样从左走到右。这种可视化最早由 Tab Atkins 推广,比传统的”测试器”更适合理解结构而不仅是验证匹配。

它解决什么问题

场景传统测试器铁路图
验证某串能否匹配✅ 强项不擅长(需要配合测试输入)
看清楚结构和分支❌ 字符串很难脑内编译✅ 强项,一眼看出嵌套层次
团队评审/讲解配文字注释直接贴 SVG,省一半口舌
调试”为什么不匹配”看错误位置看哪一段轨道走错

节点速读

形状含义
实心圆角矩形字面字符 / 元字符(\d \w \s 等)/ 字符类 […] / 锚点 ^$\b
空心圆角矩形回引 \1 \k<name>,“必须等于之前那段捕获”
上方斜体小字分组标题(绿色 = 捕获 / 黑色 = 非捕获 / 粉色 = 前瞻/后瞻)或量词说明
上下叉道| 分支,至少走一条
返回弧线* + 循环(弧线下方有量词注释)
跳过箭头?{0,n} 可选段

智能识别

工具会把常见的字符类 idiom 简写以减少视觉噪音:

  • [a-zA-Z0-9_] 自动识别为 \w
  • [0-9] 显示为简洁的 [0-9] 加 “数字” 提示
  • \d \w \s \b 等元字符按原样标注,便于直接对照

字符串中的不可见字符(空格、Tab、换行)会被替换为 \t \n,避免节点空白。

已知边界

项目状态
ECMAScript 全套语法✅ 支持
(?<name>…) 命名捕获 / \k<name> 命名回引✅ 支持
(?=…)(?!…)(?<=…)(?<!…) 零宽断言✅ 支持,单独绘制为标题分组
*? +? ?? {n,m}? 懒惰量词✅ 支持,注释里显式标 “懒惰”
Unicode 属性 \p{…}(u 标志位)⚠️ 只画一个节点,不展开为完整字符集
PCRE 条件分支 (?(cond)yes|no)❌ ECMAScript 无此语法
.NET 平衡组 (?<-name>)❌ 不支持

正则与铁路图都基于 regexp-tree 解析、railroad-diagrams 渲染,全程在浏览器本地完成,可断网使用。

📍使用场景

  • 接手别人写的复杂正则项目里一坨 200 字符的正则,光看字符串完全猜不到流程,画成铁路图后分支、嵌套量词、零宽断言一目了然,再决定要不要重写。
  • 给同事讲清楚正则评审时复制 SVG 直接贴 PR 评论或 Confluence,比起"你慢慢看"的字符串说明效率高一截,远端协作也省事。
  • 调试不匹配的边界测试器告诉你"没匹配上"但说不出哪一段不对,铁路图能看出量词覆盖范围、捕获组边界、前后瞻位置——往往一眼就发现 `+` 写错位置。
  • 学习他人的正则模板看 Stack Overflow 抄来的密码强度 / URL / SemVer 正则,画图能看清每一段断言负责什么,避免照抄错语义。

常见问题

为什么要画成铁路图,不直接看正则字符串?

正则字符串是线性的,但语义是树状的——分组嵌套、分支选择、量词作用域全都靠括号和优先级隐式表达。铁路图把树展平为一条可视轨道:分支在叉道、循环在回环、可选在跳过——视觉直观对应执行路径。复杂正则的可读性差距能拉开 5-10 倍。

支持哪些正则方言?

本工具按 ECMAScript 正则(即 JavaScript RegExp)解析,覆盖了 Python re / Go regexp / Java Pattern 的绝大多数共同语法。不支持 PCRE 专属的 (?(condition)…) 条件分支、Perl 的 (*VERB) 控制动词、.NET 的 balancing groups。常用的命名捕获 (?<name>…) 、零宽断言 (?=…)(?!…)(?<=…)(?<!…) 、命名回引 \k<name> 都没问题。

(?<=…) 后瞻能画吗?

能。前瞻 (?=…) (?!…) 和后瞻 (?<=…) (?<!…) 都会被画成单独的标题分组,标题用粉色区分("前瞻 / 负向前瞻 / 后瞻 / 负向后瞻"),框内是断言内容。注意零宽断言不消耗字符——图上不会显式标,但理解时要记得。

懒惰量词 *? +? ?? 怎么显示?

量词节点上方会标 "0 次或多次 · 懒惰:尽量少匹配" 这样的注释。贪婪是默认(不会特别标),懒惰会单独写出来——多数性能问题来自意外的贪婪回溯,看图能帮你确认是不是写对了。

导出的 SVG 能直接放进文档吗?

能。"⤓ SVG" 导出的文件自带亮色样式(不依赖站点 CSS),贴进 Notion / Confluence / 博客 / PR Markdown 都能正常显示。"⎘ SVG" 把源码复制到剪贴板,方便插进 markdown 的 <svg>...</svg> 块。要 PNG 用 "⤓ PNG",输出 2× 高清版本(白底)。

工具会上传我的正则吗?

不会。所有解析都在浏览器本地用 regexp-tree 完成——没有任何网络请求,可以断网使用。即便是企业内部、含敏感业务规则的正则也能放心贴进来。

为什么我的正则报错"Unexpected token"?

99% 的情况是括号没配平或者字符类没闭合——错误信息里的 column 数字是粘贴文本里第几个字符出错,工具会自动选中这一位帮你定位。常见踩坑:忘了把 ( [ 转义成 \( \[、嵌套量词 *+(两个连续)、命名捕获写成 (<name>…) 漏了 ?