Regex Tester
One input per line. Output is numbered to match the input order.
Pinned tools are listed in your favourites on the home page.Copies a link to this tool that carries your current input, so it opens ready to run.Gives you an iframe snippet for putting this tool on your own site.
Ctrl+Enter Run · Ctrl+Shift+C Copy · Esc Clear
Understand Regex Tester
这个测试器把一条正则表达式跑在示例文本上,显示每一处匹配、它的位置,以及每个捕获组的内容。
How it works
模式由浏览器自带的 RegExp 引擎编译,因此这里发生的与在 Node 和浏览器中发生的完全一致——是 ECMAScript 语法,不是 PCRE 或 RE2。该引擎会回溯:某个分支失败时它会回退并尝试下一个可选分支,这就是为什么量词套量词(例如 (a+)+$)在面对一段较长且不匹配的字符串时,可能探索指数级数量的路径。这就是灾难性回溯,这里的两秒截断正是为了捕捉它。
When to use it
- 弄清一条校验模式为什么会拒绝本应接受的输入。
- 在把解析代码定下来之前,先从日志行里提取字段。
- 在把捕获组接进替换字符串之前,先确认组的编号。
- 用刁钻的用例——空字符串、非 ASCII 文本、多行文本——而不是顺利路径来测试模式。
Watch out for
- 测试器始终带全局标志运行,好让你看到每一处匹配。而你自己的代码若用的是非全局正则,只会拿到第一处;跨调用复用的全局正则则会在调用之间保留 lastIndex,这就是 .test() 对同一个字符串会在 true 和 false 之间交替的原因。
- 在这里跑几秒的模式,在生产环境同样会跑几秒。如果它会作用于服务器上用户提供的输入,那就是一个拒绝服务的入口,而用户提供的模式更糟。
- JavaScript 的 \d、\w 和 \b 只覆盖 ASCII。从 Python 或 Java 抄来的、依赖 unicode 感知字符类的模式,会静默漏掉非英文输入。
- 除非加上 s 标志,点号不匹配换行;除非加上 m 标志,^ 和 $ 锚定的是整个字符串。
Not the right tool for: 校验电子邮件地址。为此写的每条正则要么是错的,要么无法阅读——检查有一个 @ 且两侧都有内容,然后发一封确认邮件。
Frequently Asked Questions
这里使用的是哪种正则方言?
本测试器使用 JavaScript 内置的 RegExp 引擎,遵循 ECMAScript 正则语法。这与 Node.js 和浏览器中使用的是同一个引擎。
支持哪些标志位?
JavaScript 支持:g(全局)、i(忽略大小写)、m(多行)、s(dotAll)、u(unicode)和 y(粘性)。在标志位输入框中填写它们即可。
如何使用捕获组?
用圆括号表示捕获组:(\w+)。命名组写作 (?<name>\w+)。结果会同时显示按序号和按名称的组值。
How to Use Regex Tester
- Paste or type your input in the input area above.
- The tool processes your input automatically or click Run.
- Copy or download the result using the action buttons.
- Use Ctrl+Enter to run quickly from the keyboard.