ZeroTool Workbench
正则表达式测试器
实时测试和调试正则表达式。查看所有匹配高亮、捕获组列表和匹配计数。免费在线工具。
使用方法
- 在正则表达式输入框中填写你的表达式(不含斜杠)。
- 在 Test String 区域粘贴或输入要测试的文本。
- 切换标志位:
g(全局匹配)、i(忽略大小写)、m(多行)、s(dotAll)。 - 匹配结果会实时高亮显示,捕获组列在下方。
常用正则表达式
\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 $42 | 42(后行断言) |
^(?<ts>\S+)\s+(?<level>\w+)\s+(?<msg>.+)$ | 2026-04-07T14:23:01 ERROR connection refused | 1 个匹配;分组为 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 后会查找所有匹配。
能显示捕获组吗?
可以。当匹配包含捕获组时,每个匹配下方会列出所有捕获组。