正则表达式测试
实时匹配、按标志运行、逐条列出捕获组
表达式不带两侧的 /;选择标志并输入文本即可匹配。结果中的位置从 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 标志,适合调试提取规则和学习零宽匹配。
适用场景
- 写日志切分脚本前,验证正则能不能覆盖到所有行。
- 排查一个「几乎能匹配」的表达式为什么在某几条上失败。
- 把命名捕获组的值挑出来,快速看结构。
操作步骤
- 在“正则表达式”中输入表达式,不带首尾的 /。
- 在“标志”中输入 g(全局)、i(忽略大小写)、m(多行)、s(点号匹配换行)、u(Unicode)或 y(粘连),每种标志最多一次。
- 在“文本”中粘贴目标文本;修改任一项会自动重新匹配。
注意事项
本工具用的是 JavaScript 的 RegExp 引擎,与 PCRE / Go regexp / Java 的正则在某些细节(回溯、原子组、条件表达式)上不完全一致;如果目标是其它语言,最终请以那种语言的实测为准。
常见问题
- 匹配数量为什么上限 5000?
- 避免恶意或错误的表达式导致浏览器无响应。超过时停止并给出提示,可以修改表达式或裁短文本后再试。
- 为什么全局标志 g 没生效?
- 检查是否在 Flags 里输入了 `g`。此外,如果模式能匹配空串(例如 `.*`),本工具会自动步进防止死循环——真实代码里遇到同样情况也要注意。
- 如何测试命名捕获组?
- 用 `(?<name>...)` 语法即可,结果里会以 `<name>` 单独列出。
- 为什么在 PHP 或 Python 中结果不同?
- 它们使用的正则引擎及 Unicode、后行断言、组名语法可能不同。此页结果仅代表当前浏览器的 JavaScript 实现,上线前应在目标语言中复测。
- 为什么此处的结果与 PHP 或 Python 不同?
- 本工具使用浏览器的 JavaScript 正则引擎。其他语言可能有不同的语法、Unicode 行为和标志含义,不能把这里的测试结果当作所有引擎都通过。
相关工具