正则表达式测试工具
粘贴文本即时高亮所有命中,列出内容、起止位置与捕获组;修饰符勾选即可(g/i/m/s/u/y),支持替换模板 $1、$&、$<name> 实时预览;右侧常驻 93 条常用正则,点一下填入表达式框。
命中高亮
订单号 2026-0001 已发货,收件人 张伟,手机 13812345678,备用 +86 13987654321。 邮箱 zhang.san@example.com.cn,座机 010-88886666,客服 400-880-1234,QQ 123456789,微信 wxid_abc123。 地址:北京市海淀区中关村大街 1 号,邮编 100080,身份证 11010519900307867X,信用代码 91110108MA01C8K23T。 网页 https://www.myutopia.cn/bmi-jisuanqi/ 部署在 192.168.100.7:8080,MAC 00-1A-2B-3C-4D-5E,IPv6 2001:0db8:85a3:0000:0000:8a2e:0370:7334。 金额 1,280,000.50 元(占比 99.5%,运费 12.5 千克),下单时间 2026-10-14 09:30:15,时间戳 1760000000。 版本 v1.2.3-beta.1,文件 report-2026.pdf 与 C:\Users\duanj\Desktop\合同.docx,主色 #1f6feb / rgba(31, 111, 235, 0.8)。 <div class="tip">提示</div> <!-- 内部注释 --> <a href="https://a.cn">锚文本</a> <img src="logo.png"> 实体 今天不错😀✨ 好好好厉害,测试 testing 完成,中文English2026,车牌 京A12345 / 京AD12345,卡号 6222021234567890。
匹配明细(最多显示 200 条,位置从 0 开始计数)
| 序号 | 匹配内容 | 起始位置 | 结束位置 | 捕获组 / 命名组 |
|---|---|---|---|---|
| 1 | 13812345678 | 28 | 39 | 138 | 5678 | 前3=138 | 后4=5678 |
| 2 | 13987654321 | 47 | 58 | 139 | 4321 | 前3=139 | 后4=4321 |
| 3 | 11010519900 | 182 | 193 | 110 | 9900 | 前3=110 | 后4=9900 |
| 4 | 62220212345 | 714 | 725 | 622 | 2345 | 前3=622 | 后4=2345 |
替换结果
订单号 2026-0001 已发货,收件人 张伟,手机 138****5678,备用 +86 139****4321。 邮箱 zhang.san@example.com.cn,座机 010-88886666,客服 400-880-1234,QQ 123456789,微信 wxid_abc123。 地址:北京市海淀区中关村大街 1 号,邮编 100080,身份证 110****9900307867X,信用代码 91110108MA01C8K23T。 网页 https://www.myutopia.cn/bmi-jisuanqi/ 部署在 192.168.100.7:8080,MAC 00-1A-2B-3C-4D-5E,IPv6 2001:0db8:85a3:0000:0000:8a2e:0370:7334。 金额 1,280,000.50 元(占比 99.5%,运费 12.5 千克),下单时间 2026-10-14 09:30:15,时间戳 1760000000。 版本 v1.2.3-beta.1,文件 report-2026.pdf 与 C:\Users\duanj\Desktop\合同.docx,主色 #1f6feb / rgba(31, 111, 235, 0.8)。 <div class="tip">提示</div> <!-- 内部注释 --> <a href="https://a.cn">锚文本</a> <img src="logo.png"> 实体 今天不错😀✨ 好好好厉害,测试 testing 完成,中文English2026,车牌 京A12345 / 京AD12345,卡号 622****234567890。
位置从 0 开始计数且不含右端点,与 JS、Python、Java 的下标口径一致。空匹配(例如 a* 对不含 a 的文本)标为「空匹配」。 替换模板按 JavaScript String.replace 的规则展开:$& 整条命中、$1…$99 捕获组、$<name> 命名组、$` 命中前的内容、$' 命中后的内容、$$ 一个美元符号;引用不存在的组时保留字面量。
本页所有计算在浏览器内完成,输入内容不会被上传。
计算口径
表达式与勾选出来的修饰符一起交给 RegExp 构造(g i m s u y 六个开关,勾了才写进修饰符)。遍历时逐次调用 exec,并在命中为空串时把 lastIndex 手动前移 1 位,因此 (a*)、\b 这类会产生零长度匹配的模式不会死循环;勾选 g 时列出全部命中,不勾时只判定第一处。捕获组取自同一次 exec 的下标 1 到 n,命名组来自 (?<name>…)。替换结果由本页按 String.prototype.replace 的模板规则逐段展开后再拼接,与浏览器原生 String.replace 的输出一致。
使用说明
- 第一个框粘文本、第二个框写表达式,其余都不用点,输入即算
- 修饰符直接勾选:批量查找加 g,忽略大小写加 i,按行锚点加 m,\u{…} 码点写法必须加 u
- 要换格式就勾「执行替换」再填模板,例如把 (\d{3})-(\d{4}) 替换成 编号:$2,替换框下方就是可以复制的成品文本
- 右侧「常用正则表达式」共 10 类 93 条:点任意一条把表达式填进上面的框并立刻重新匹配;被选中的那条会展开说明和「试一试」,点「试一试」连示例文本一起替换
- 搜索框按名称、表达式内容或说明过滤,例如「手机」「断言」「\d{3}」;窄屏时表达式库折叠在结果下方,点标题展开
常见问题
为什么我写 \d 匹配不到数字?
如果从代码里复制,源码中写的是 "\\d"(字符串转义后才是 \d)。本工具的输入框按正则原样理解,只需写 \d。
起始位置为什么从 0 开始?
JS、Python、Java 等语言的字符串下标都从 0 计数,结束位置是不包含的(不含右端点),所以一条 3 个字符的匹配在位置 5 会显示起始 5、结束 8。
匹配 5000 条就停了怎么办?
这是防卡死的遍历上限。把文本切成段落分批测试,或收紧表达式(加上边界、更具体的字符类)来减少命中数量。
点库里的表达式会覆盖我自己写的内容吗?
只会覆盖「正则表达式」框,并且把该条需要的修饰符勾选好(该条没标修饰符时恢复成只勾 g);待匹配文本不动。选中的那条会展开它的说明,这时点「试一试」才会连示例文本一起替换。填入前请自己保留写好的表达式。
替换模板里 $1、$&、$<name> 分别是什么?
$& 是整条命中的内容,$1…$99 是第 n 个捕获组(按表达式里左括号的顺序数),$<name> 是 (?<name>…) 命名组,$$ 输出一个 $ 本身,$` 取命中之前的全部内容、$' 取命中之后的全部内容。引用了不存在的组时按原样保留字面量,不会报错。想删掉命中内容就勾「执行替换」并把模板留空。
表达式库里的写法可以直接用到别的语言吗?
大部分可以,但有三类差异:\u{…} 形式的 Unicode 码点在 Python/Java 里写法不同;(?<=…) 后顾断言在旧 Safari 与部分语言的轻量引擎里不支持;\d、\w 默认是否包含中文等非 ASCII 字符,各语言口径不一样(JS 默认只匹配 ASCII,Python 的 str 默认按 Unicode)。移植时先用本工具在 JS 口径下确认,再在目标语言里复测。