如何测试一个正则表达式?
输入一个正则式和一段示例文本,工具就会高亮每一处匹配、列出捕获分组,并让你开关全局、多行、忽略大小写等标志。匹配在你的浏览器里用 JavaScript 自带的正则引擎运行,所以结果与你的代码所见的完全一致。
完全在浏览器内运行 · 不上传 · 不需要账号 · 无水印
- 输入一个正则式,并勾选你要的标志。
- 粘贴一些用于匹配的示例文本。
- 先看高亮,再看下方的匹配列表。
高亮
匹配结果
这个页面能做什么
- 实时高亮每一处匹配
- 列出每个匹配的偏移量与捕获分组
- 开关 g、i、m、s、u 标志
- 报告非法正则,而不是默默失败
什么时候该用这个工具
- 拿一个 JavaScript 正则式去试一段示例字符串。
- 看看哪些捕获分组和标志会产生哪些匹配。
- 在把正则式放进前端代码之前先做一次合理性检查。
什么时候不该用
- 正则式针对的是 Python、PCRE、.NET 或 Java —— 它们的语法与回溯行为不同于 JavaScript 的 RegExp。
- 输入不可信,且正则式可能发生灾难性回溯;测试在主线程上运行,可能冻结标签页。
- 你需要逐步解释、基准测试或超时控制。
和其他方案比,差在哪
regex101 之类的工具让你切换引擎、逐符号解释并设置超时。本页运行浏览器自带的 RegExp,没有那些保护,所以它忠于 JavaScript,也继承了它的局限:没有原子组,没有占有量词,也没有针对病态正则的防护。一个故意写坏的正则式能让标签页一直卡到你关闭它。
你的文件去了哪里
哪儿也没去。这个页面只加载了干活的代码,之后你打开的文件由你自己的浏览器读取。没有上传步骤,没有临时服务器副本,也没有需要你信任的清理流程——数据从未经过网络,所以事后没有任何东西需要删除。你可以自己确认:在工具运行时打开浏览器的网络面板,看它一直安静。
关于这个工具的问题
- 我用我的正则式时页面卡住了,为什么?
- 那是灾难性回溯:像 (a+)+b 这样的正则式去匹配一长串“a”,会让引擎尝试指数级多的失败路径。本页给匹配数量设了上限,所以它不会无限打转,但单个顽固的匹配仍可能需要一点时间。请改写嵌套量词,让引擎只有一条路径 —— 例如 a+b —— 或者用 ^ 或 $ 给正则式加上锚点。
- 我能打开哪些标志?
- g 找出每一处匹配而不是第一处,i 忽略大小写,m 让 ^ 和 $ 在换行处匹配,s 让 . 也匹配换行,u 打开完整的 Unicode 模式 —— 这是 \p{...} 属性转义以及正确处理基本平面之外字符所必需的。结果与 JavaScript 自带引擎给出的完全一致,所以它们与你的代码相符。
- 为什么只列出了几千个匹配?
- 列表设了上限,好让一个逐字符匹配的正则式 —— 例如在长文档上带全局标志的 . —— 不会在它构建成千上万行时把标签页锁死。这个上限对现实中的测试字符串足够高;如果你撞上了它,请收窄正则式或缩短示例。