正则表达式测试

在线测试正则表达式,实时匹配高亮并查看捕获组。输入表达式与测试文本即见结果,支持 g/i/m/s/u 修饰符与常用正则快捷插入,全程在浏览器本地运行。

不要包含两侧的斜杠 /,写法与 JavaScript 的 RegExp 保持一致。

常用正则

使用说明

  1. 在「正则表达式」输入框中键入表达式,不需要包裹斜杠;如匹配日期可输入 \d{4}-\d{2}-\d{2}。
  2. 按需勾选修饰符:g 查找全部、i 忽略大小写、m 让 ^ 与 $ 匹配每行、s 让 . 匹配换行、u 启用 Unicode。
  3. 在下方的测试文本框中粘贴或输入内容,所有匹配会实时以高亮标出,表达式非法时也会即时提示。
  4. 「匹配详情」按顺序列出每一处匹配的完整文本与各个捕获组,方便核对分组是否正确。
  5. 需要参考时点击「常用正则」中的快捷项,即可把邮箱、URL、手机号等常用表达式填入输入框。

常见问题

为什么提示「无效的正则表达式」?
多为未闭合的括号或量词使用不当,例如 ([a-z]+、* 或 + 前缺少可重复对象等。请检查括号是否成对、量词是否放在合法位置,浏览器会给出大致出错位置。
什么是捕获组?有什么用?
用圆括号括起来的部分会单独捕获,例如 (\d{4})-(\d{2}) 会分别捕获年份与月份。本工具会列出每一处匹配的各组内容,便于调试数据提取规则。
不勾选 g 时为什么只高亮一处?
没有 g 修饰符时正则默认只匹配首次出现;要高亮文本中的全部匹配,请勾选「g 全局匹配」。
我的文本会上传到服务器吗?
不会。匹配、高亮与分组展示全部在浏览器本地完成,您粘贴的内容不会离开当前设备。

使用步骤

  1. 输入正则不加斜杠

    在正则表达式框里直接书写表达式,首尾不要包斜杠。例如 \d{4}-\d{2}-\d{2} 匹配日期格式的文本。

  2. 按需勾选匹配标志

    按需勾选:g 全局匹配找出全部结果,i 忽略大小写,m 使 ^ 与 $ 按行生效,s 让点号可以匹配换行。

  3. 粘贴文本看高亮结果

    把待测试的内容粘贴进测试文本框,每一处匹配会实时高亮,表达式写错时会立即报出无效正则的提示。

  4. 查看匹配详情与捕获组

    展开匹配详情列表,逐条查看每次匹配的完整文本与各组捕获内容,用来验证圆括号分组是否按预期提取数据。

  5. 用常用正则快速起步

    不想从零写时,点常用正则里的邮箱、URL、手机号、IP 地址或日期按钮,载入现成表达式再按业务微调。

工具详细介绍

这是一个在浏览器里即时验证正则表达式的调试工具。左边写表达式、勾选标志,右边贴文本,所有匹配实时高亮,每处匹配的捕获组逐条列出。表达式语法有误时立即提示,不必再在代码里反复运行猜测。

适合在写数据提取规则前先验证分组,检查校验规则为什么没拦住某个输入,学习正则语法时观察每个符号的效果。从日志或文本里设计匹配模式时,也可以先在这里试。前后端开发者、测试工程师和数据分析师都能把它当作日常的正则试验台。

原理与背景

正则表达式源于 Stephen Kleene 在 1951 年提出的正则集理论。Ken Thompson 把它实装进 ed 编辑器,正则才走入工程。实现分两大流派:Thompson 构造的 DFA 引擎逐字符扫描、耗时稳定,但支持不了反向引用。JavaScript 采用带回溯的 NFA 引擎,表达力强,代价是遇到 (a+)+ 这类嵌套量词时,失败匹配可能触发指数级回溯。一行正则就能让页面卡死数分钟,也就是常说的灾难性回溯。

在 JavaScript 里书写正则还有转义的双轨制:字符串会先消化一层反斜杠。同一个 \d 在字面量里这样写没问题,放进 RegExp 构造函数就得写成 \\d。从字符串常量里复制出来的正则突然失效,多半栽在这里。另外 g 标志会让正则对象携带 lastIndex 状态,跨多次调用复用同一对象时匹配会跳位。量词默认贪婪,句尾加问号改为惰性后从短到长尝试,提取引号内内容这类任务里,两种写法的取值差别很大。

典型使用场景

  1. 设计数据提取规则

    写爬虫或日志分析前,把候选正则和几段真实样本一起贴进来,逐条查看捕获组输出是否干净。边界情况当场暴露,比上线后在业务代码里反复修补省事得多。

  2. 排查校验规则漏放行

    本该拦住的输入没被拦住时,把那条输入和校验正则一起贴进来复现。常见原因是漏了 ^ $ 锚点、忘了 i 忽略大小写,或字符类里少了要排除的符号,几分钟就能定位。

  3. 评估第三方正则的安全性

    接入旧项目或第三方校验库时,把可疑表达式和一条超长的不匹配文本一起测。高亮迟迟不出或页面卡顿,就存在回溯失控的隐患,要改写表达式结构,而不是加服务器配置。

使用技巧

  • 没勾 g 时只匹配第一处;想让文本中所有匹配都高亮,记得勾选 g 全局匹配。
  • 报无效正则多是括号没闭合或量词前缺少可重复对象,例如 ([a-z]+ 少了右括号,按提示检查即可。
  • 圆括号会单独捕获内容,例如 (\d{4})-(\d{2}) 可分别取出年份与月份,写提取规则前先在此验证。

注意事项

  • 嵌套量词引发指数回溯

    (a+)+、(\w+)* 这类嵌套量词遇到先大量匹配、随后失败的文本时,会产生指数级回溯。浏览器可能因此假死。测试这类表达式前先准备一条超长的不匹配样本,控制风险。

  • 校验正则缺少锚点

    不加 ^ $ 的正则会从长文本的任意位置抠出片段,校验手机号时连订单号里的连续 11 位也能通过。校验类表达式务必首尾锚定,或用 \b 限定单词边界。

  • 不可见字符导致失配

    全角空格、不换行空格(\u00A0)混进测试文本时,看起来正确的正则会意外失配。用 \s 代替字面空格能顺带覆盖这类字符,仍失配时先清理文本来源再定位。

相关工具