正则表达式测试工具

边写边看效果,实时高亮匹配位置,列出捕获分组。附常用正则速查表。

/ /
输入正则后,这里会高亮显示所有匹配位置

正则表达式测试工具使用说明

正则表达式(Regular Expression,简称 regex)是用一套简洁语法描述文本匹配规则的工具。它广泛用于表单校验、日志提取、批量替换、数据清洗等场景。但正则的语法密度很高,写错一个字符结果就完全不同,所以有一个能实时看到匹配效果的工具会省很多时间。

这个工具能帮到什么

五个常用标志的含义

几个容易踩的坑

量词贪婪问题。 .* 默认是贪婪的,会尽可能多匹配。比如用 <.*> 去匹配 <a><b>,结果是整串而不是两个标签。改成 <.*?>(加问号变懒惰)才是期望行为。

锚点与多行。 ^\d+$ 在默认模式下只能匹配"整段文本就是一个纯数字",要逐行校验必须开 m 标志。

转义忘了加。 在 JavaScript 字符串里写正则,反斜杠要写两次,比如手机号应该写成 "^1[3-9]\\d{9}$"。本工具输入框是正则字面量形式,直接写 \d 一个反斜杠即可。

表单校验要加锚点。 只写 [0-9]{11} 会从 abc13800000000xyz 里也匹配出"手机号"。校验用途必须用 ^...$ 限定从头到尾。

性能提示

某些正则会触发灾难性回溯,例如 (a+)+b 去匹配一长串 aaaa... 时,耗时可能指数级增长,把浏览器卡死。如果发现页面失去响应,问题通常出在嵌套量词上,可以改写成 a+b 这类更精确的形式。

常见问题

速查表里的正则能直接用在生产环境吗?

可以,但建议按需调整。手机号规则会随号段政策变化,近几年新增号段时要更新;身份证的完整版只校验了格式和日期合理性,没有校验最后一位校验码;邮箱是实用型简化规则,能满足绝大多数场景,但如果要严格符合 RFC 5322 会复杂得多,通常不值得。

为什么我的正则在其他语言里能用,这里不行?

本工具使用 JavaScript 正则引擎,语法与 PCRE(PHP、Python 的 re)有差异。典型区别有三处:JavaScript 不支持 (?<name>) 之外的某些扩展语法、不支持条件匹配和递归、不支持 \A \z 这类锚点(要用 ^ $)。命名分组 (?<name>...) 是支持的。

怎么匹配含换行的内容?

两种办法:把 . 换成 [\s\S],或者开启 s 标志。前者兼容性更好,在几乎所有引擎里都能用。

测试的文本会被保存吗?

不会。所有匹配都在浏览器内存里完成,页面刷新即清空,没有任何上传行为。

相关工具