正则表达式测试器
测试 JavaScript 正则表达式,查看匹配计数、限量高亮和捕获组。浏览器 Worker 限时两秒,可取消。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
常用正则表达式
\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+)+$遇到接近匹配的文本时可能耗时很长。原生 JavaScript RegExp 在 Worker 中执行,总时限为两秒,可点「取消」立即停止。超时或取消时没有完整结果。更换输入会停止上一轮。
限制
- 只支持 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,000 个 UTF-16 码元及最多 1,000 个匹配。列表显示前 100 个匹配、每个匹配的前 20 个组;每个值最多 1,000 码元,合计最多 100,000 码元,缩短的值以
…结尾。index 按 UTF-16 码元计,匹配前每个 emoji 占 2。浏览器须支持 Worker。 - 不支持替换。 测试器只查找匹配,不执行
replace()。
FAQ
使用的是哪种正则引擎?
JavaScript(ECMAScript)正则引擎,通过浏览器内置的 RegExp 对象执行。
支持哪些标志位?
g(全局匹配)、i(忽略大小写)、m(多行模式)和 s(dotAll,点号匹配换行符)。可以组合使用。
g 标志位有什么用?
不加 g 只返回第一个匹配。加上 g 后会查找所有匹配。
能显示捕获组吗?
可以。列表显示前 100 个匹配及每个匹配的前 20 个组,缩短的值用 … 标记。