ZeroTool Workbench

正则表达式测试器

实时测试和调试正则表达式。查看所有匹配高亮、捕获组列表和匹配计数。免费在线工具。

100% 浏览器端运行 数据不离开你的设备 免费 · 无需注册
/ /

使用方法

  1. 在正则表达式输入框中填写你的表达式(不含斜杠)。
  2. 在 Test String 区域粘贴或输入要测试的文本。
  3. 切换标志位:g(全局匹配)、i(忽略大小写)、m(多行)、s(dotAll)。
  4. 匹配结果会实时高亮显示,捕获组列在下方。

常用正则表达式

  • \d+ — 一个或多个数字
  • \w+ — 一个或多个单词字符(字母、数字、下划线)
  • [a-zA-Z]+ — 仅字母
  • ^\s+|\s+$ — 首尾空白字符
  • (\w+)@(\w+.\w+) — 简单邮箱捕获
  • https?://\S+ — URL 链接

实测示例

下表是勾选 g 时测试器返回的结果:

正则测试文本匹配
^1[3-9]\d{9}$13812345678整串匹配(中国大陆 11 位手机号的格式)
[\u4e00-\u9fff]+订单号 12345 已发货订单号、已发货
<.+><a>foo</a><a>foo</a>(贪婪:从第一个 < 到最后一个 >)
<.+?><a>foo</a><a>、</a>(非贪婪)
(?<=\$)\d+cost $4242(后行断言)
^(?<ts>\S+)\s+(?<level>\w+)\s+(?<msg>.+)$2026-04-07T14:23:01 ERROR connection refused1 个匹配;分组为 2026-04-07T14:23:01、ERROR、connection refused

正则只检查格式。^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ 会接受 2026-02-31,日期请用日期库解析;手机号正则也只说明位数和号段格式,不代表号码存在。

常见错误

  • 元字符没转义。 . * + ? ( ) [ ] { } ^ $ | \ 都有特殊含义,匹配句点要写 \.。
  • 多行文本里的 ^ 和 $。 不勾 m 时,它们只匹配整段文本的开头和结尾。
  • \w 只匹配 ASCII。 \w+ 在 café 東京 上只匹配到 caf,汉字一个也匹配不到。匹配汉字用 [\u4e00-\u9fff]+ 这样的范围。
  • 嵌套量词。 (a+)+$ 对 28 个 a 加一个 b,在 Node.js 24(与 Chrome 同为 V8 引擎)上耗时 18 秒。测试器在页面里直接运行、没有超时,匹配结束前标签页会卡住。

限制

  • 只支持 JavaScript 语法。 Python 的 (?P<name>...) 会报「Invalid group」,要写成 (?<name>...);为 Go(RE2)、PCRE、Java 写的正则,行为可能不同。
  • 只有 4 个标志。 只能选 g、i、m、s。没有 u,所以 \p{L} 被当作字面文本 p{L};y、d、v 也不可用。
  • 分组按序号显示。 命名分组也显示为「组 1」「组 2」。
  • 匹配列表只列前 100 个。 高亮会标出全部匹配。index 按 UTF-16 码元计,匹配前每个 emoji 占 2。
  • 不支持替换。 测试器只查找匹配,不执行 replace()。

FAQ

使用的是哪种正则引擎?

JavaScript(ECMAScript)正则引擎,通过浏览器内置的 RegExp 对象执行。

支持哪些标志位?

g(全局匹配)、i(忽略大小写)、m(多行模式)和 s(dotAll,点号匹配换行符)。可以组合使用。

g 标志位有什么用?

不加 g 只返回第一个匹配。加上 g 后会查找所有匹配。

能显示捕获组吗?

可以。当匹配包含捕获组时,每个匹配下方会列出所有捕获组。