正则表达式测试工具使用说明
正则表达式(Regular Expression,简称 regex)是用一套简洁语法描述文本匹配规则的工具。它广泛用于表单校验、日志提取、批量替换、数据清洗等场景。但正则的语法密度很高,写错一个字符结果就完全不同,所以有一个能实时看到匹配效果的工具会省很多时间。
这个工具能帮到什么
- 实时高亮:一边输入正则,一边在测试文本上标出所有匹配位置,不需要点按钮
- 匹配项列表:把每个匹配到的内容和它的位置单独列出来,方便核对
- 捕获分组:用括号捕获的子串会用不同颜色高亮,可以检查分组是否按预期划分
- 错误提示:正则语法写错时会直接告诉你是哪一类错误(如未闭合的括号),而不是静默失败
- 速查表:点击常用正则(手机号、邮箱、身份证等)可直接填入,省去手写和记忆
五个常用标志的含义
g全局匹配:找出所有匹配,而不是找到第一个就停。测试时建议一直开着。i忽略大小写:/abc/i能匹配ABC、Abc。m多行模式:让^和$匹配每一行的开头和结尾,而不只是整段文本的首尾。这个标志在逐行校验时必不可少。s点号匹配换行:默认.不匹配换行符,开启后.可以匹配包括换行在内的任意字符。uUnicode 模式:正确处理 Emoji、生僻字等四字节字符。如果测试文本里有 Emoji 且结果异常,试着打开它。
几个容易踩的坑
量词贪婪问题。 .* 默认是贪婪的,会尽可能多匹配。比如用 <.*> 去匹配 <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 标志。前者兼容性更好,在几乎所有引擎里都能用。
测试的文本会被保存吗?
不会。所有匹配都在浏览器内存里完成,页面刷新即清空,没有任何上传行为。