onlinetools.dev

正则表达式测试

实时高亮匹配与捕获分组,在线测试正则表达式

本地运行
loading…
关于此工具

写一个模式,粘贴样本文本,每个匹配都会随输入实时高亮——捕获组、命名组和匹配位置列在下方。测试器使用 JavaScript 的 RegExp 引擎,行为与 Node.js 和浏览器完全一致,包括后行断言、命名组和 Unicode 属性转义。

标志按字母切换(g、i、m、s、u、y、d),模式在每次按键时重新编译;语法错误立即以引擎自己的消息呈现,而不是等你点按钮。像 a* 这样的空匹配模式会被安全处理,失控输入被限制在 10,000 个匹配,防止一个跑飞的 .* 卡死标签页。

不同引擎的正则方言存在差异——在这里可用的模式,换到 PCRE、RE2 或 Python 的 re 模块可能需要调整,主要是后行断言支持、占有量词和内联标志。

常见问题

这个测试器用的是哪种正则方言?
ECMAScript(JavaScript),由你自己的浏览器实现。支持先行/后行断言、命名捕获组、反向引用,以及 \p{Letter} 这类 Unicode 属性转义(需 u 标志)。不支持 PCRE 独有的语法,比如占有量词或递归。
为什么我的模式匹配了所有内容 / 什么都不匹配?
两个经典原因:未转义的元字符(. 匹配任意字符——想匹配字面点要写 \.),或者脑子里漏了 g 标志——这个测试器总是找出全部匹配,但你的代码不设 g 就只找第一个。
什么是命名捕获组?
语法 (?<name>...) 给分组命名,让你按名字而非位置读取匹配:JavaScript 里是 match.groups.name。匹配列表下方的分组面板会同时显示每个匹配的编号捕获和命名捕获。
这里的正则能原样在 Python 或 Go 里运行吗?
经常可以,但不总是。字符类、量词和锚点是可移植的;后行断言、命名组语法(Python 用 (?P<name>...))和内联标志有差异。Go 的 RE2 引擎更是完全拒绝反向引用和环视。
相关工具