正则表达式测试工具

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

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

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

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

这个工具能帮到什么

  • 实时高亮:一边输入正则,一边在测试文本上标出所有匹配位置,不需要点按钮
  • 匹配项列表:把每个匹配到的内容和它的位置单独列出来,方便核对
  • 捕获分组:用括号捕获的子串会用不同颜色高亮,可以检查分组是否按预期划分
  • 错误提示:正则语法写错时会直接告诉你是哪一类错误(如未闭合的括号),而不是静默失败
  • 速查表:点击常用正则(手机号、邮箱、身份证等)可直接填入,省去手写和记忆

五个常用标志的含义

  • g 全局匹配:找出所有匹配,而不是找到第一个就停。测试时建议一直开着。
  • i 忽略大小写:/abc/i 能匹配 ABC、Abc。
  • m 多行模式:让 ^ 和 $ 匹配每一行的开头和结尾,而不只是整段文本的首尾。这个标志在逐行校验时必不可少。
  • s 点号匹配换行:默认 . 不匹配换行符,开启后 . 可以匹配包括换行在内的任意字符。
  • u Unicode 模式:正确处理 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 标志。前者兼容性更好,在几乎所有引擎里都能用。

测试的文本会被保存吗?

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

相关工具