正则表达式测试

正则表达式测试

实时匹配、按标志运行、逐条列出捕获组

浏览器本地计算

表达式不带两侧的 /;选择标志并输入文本即可匹配。结果中的位置从 0 开始,计算超时会停止。

 

示例

输入

正则表达式:(cat|dog)
标志:g
文本:cat and dog

示例结果

#0  "cat"
  $1 = "cat"

#8  "dog"
  $1 = "dog"

位置从 0 开始。表达式输入框不需要两侧的 / 分隔符。

技术细节与边界

位置以 JavaScript UTF-16 码元为单位。g 查找全部匹配,i 忽略大小写,m 改变行首尾锚点,s 让点号匹配换行,u 启用 Unicode 模式。匹配在独立 Worker 中运行并设超时,以减少复杂回溯对页面的阻塞;最多展示 5000 条结果。

关于此工具

使用浏览器的 JavaScript 正则引擎测试表达式,查看匹配位置、完整匹配和捕获组。支持 g、i、m、s、u、y 标志,适合调试提取规则和学习零宽匹配。

适用场景

  • 写日志切分脚本前,验证正则能不能覆盖到所有行。
  • 排查一个「几乎能匹配」的表达式为什么在某几条上失败。
  • 把命名捕获组的值挑出来,快速看结构。

操作步骤

  1. 在“正则表达式”中输入表达式,不带首尾的 /。
  2. 在“标志”中输入 g(全局)、i(忽略大小写)、m(多行)、s(点号匹配换行)、u(Unicode)或 y(粘连),每种标志最多一次。
  3. 在“文本”中粘贴目标文本;修改任一项会自动重新匹配。

注意事项

本工具用的是 JavaScript 的 RegExp 引擎,与 PCRE / Go regexp / Java 的正则在某些细节(回溯、原子组、条件表达式)上不完全一致;如果目标是其它语言,最终请以那种语言的实测为准。

常见问题

匹配数量为什么上限 5000?
避免恶意或错误的表达式导致浏览器无响应。超过时停止并给出提示,可以修改表达式或裁短文本后再试。
为什么全局标志 g 没生效?
检查是否在 Flags 里输入了 `g`。此外,如果模式能匹配空串(例如 `.*`),本工具会自动步进防止死循环——真实代码里遇到同样情况也要注意。
如何测试命名捕获组?
用 `(?<name>...)` 语法即可,结果里会以 `<name>` 单独列出。
为什么在 PHP 或 Python 中结果不同?
它们使用的正则引擎及 Unicode、后行断言、组名语法可能不同。此页结果仅代表当前浏览器的 JavaScript 实现,上线前应在目标语言中复测。
为什么此处的结果与 PHP 或 Python 不同?
本工具使用浏览器的 JavaScript 正则引擎。其他语言可能有不同的语法、Unicode 行为和标志含义,不能把这里的测试结果当作所有引擎都通过。

相关工具

正则表达式测试 · 实时匹配、按标志运行、逐条列出捕获组
正则表达式测试 — 工具示意图 · dayeku.com