如何测试一个正则表达式?

输入一个正则式和一段示例文本,工具就会高亮每一处匹配、列出捕获分组,并让你开关全局、多行、忽略大小写等标志。匹配在你的浏览器里用 JavaScript 自带的正则引擎运行,所以结果与你的代码所见的完全一致。

完全在浏览器内运行 · 不上传 · 不需要账号 · 无水印

  1. 输入一个正则式,并勾选你要的标志。
  2. 粘贴一些用于匹配的示例文本。
  3. 先看高亮,再看下方的匹配列表。
标志

高亮

匹配结果

    这个页面能做什么

    什么时候该用这个工具

    • 拿一个 JavaScript 正则式去试一段示例字符串。
    • 看看哪些捕获分组和标志会产生哪些匹配。
    • 在把正则式放进前端代码之前先做一次合理性检查。

    什么时候不该用

    • 正则式针对的是 Python、PCRE、.NET 或 Java —— 它们的语法与回溯行为不同于 JavaScript 的 RegExp。
    • 输入不可信,且正则式可能发生灾难性回溯;测试在主线程上运行,可能冻结标签页。
    • 你需要逐步解释、基准测试或超时控制。

    和其他方案比,差在哪

    regex101 之类的工具让你切换引擎、逐符号解释并设置超时。本页运行浏览器自带的 RegExp,没有那些保护,所以它忠于 JavaScript,也继承了它的局限:没有原子组,没有占有量词,也没有针对病态正则的防护。一个故意写坏的正则式能让标签页一直卡到你关闭它。

    你的文件去了哪里

    哪儿也没去。这个页面只加载了干活的代码,之后你打开的文件由你自己的浏览器读取。没有上传步骤,没有临时服务器副本,也没有需要你信任的清理流程——数据从未经过网络,所以事后没有任何东西需要删除。你可以自己确认:在工具运行时打开浏览器的网络面板,看它一直安静。

    关于这个工具的问题

    我用我的正则式时页面卡住了,为什么?
    那是灾难性回溯:像 (a+)+b 这样的正则式去匹配一长串“a”,会让引擎尝试指数级多的失败路径。本页给匹配数量设了上限,所以它不会无限打转,但单个顽固的匹配仍可能需要一点时间。请改写嵌套量词,让引擎只有一条路径 —— 例如 a+b —— 或者用 ^ 或 $ 给正则式加上锚点。
    我能打开哪些标志?
    g 找出每一处匹配而不是第一处,i 忽略大小写,m 让 ^ 和 $ 在换行处匹配,s 让 . 也匹配换行,u 打开完整的 Unicode 模式 —— 这是 \p{...} 属性转义以及正确处理基本平面之外字符所必需的。结果与 JavaScript 自带引擎给出的完全一致,所以它们与你的代码相符。
    为什么只列出了几千个匹配?
    列表设了上限,好让一个逐字符匹配的正则式 —— 例如在长文档上带全局标志的 . —— 不会在它构建成千上万行时把标签页锁死。这个上限对现实中的测试字符串足够高;如果你撞上了它,请收窄正则式或缩短示例。

    同组的其他工具