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

  1. Paste or type your input in the input area above.
  2. The tool processes your input automatically or click Run.
  3. Copy or download the result using the action buttons.
  4. Use Ctrl+Enter to run quickly from the keyboard.