正则在线测试

边写边看命中位置,由浏览器自带的正则引擎执行,输入不出本机

标志
写出正则后,这里列出每处命中与捕获组的值
匹配高亮
替换预览
等待输入

怎么用

  1. 在正则输入框里写表达式,下面两栏会立刻跟着更新——不需要点任何「运行」按钮。
  2. 左侧粘要匹配的文本,右侧把命中的片段标黄;左下角逐条列出每处命中的位置与捕获组。
  3. 要看替换效果,在「替换为」里写替换串($1 引用第一个分组),点「替换」得到预览。
  4. 匹配始终是全局的(相当于带 g 标志),大小写、多行、点号行为由面板右上角的标志控制。

在线调试正则,省掉的是搭环境的那一步

一段正则写完,肉眼是看不出对错的——尤其是它匹配得太宽(把不该匹配的也吃了)或太窄(漏掉边界情况)的时候。为了试一次就把代码跑起来、或者开一次浏览器控制台再 console.log,成本远高于收益。这个页面把「写表达式 → 看命中 → 改」压成一步,改一个字符就能看到结果,而真正的执行者仍然是浏览器自带的那个引擎,和你在代码里跑的完全一致。

常用语法速查

写法含义
.任意字符(默认不含换行,勾选 s 后包含)
\d \D数字 / 非数字
\w \W字母、数字、下划线 / 以上之外
\s \S空白字符 / 非空白
^ $行首 / 行尾(勾选 m 后按行匹配,否则只认整串两端)
* + ?出现 0 次以上 / 1 次以上 / 0 或 1 次
{n,m}出现 n 到 m 次;{n,} 是至少 n 次
+? *?懒惰匹配:在能满足条件的前提下尽量少地吃字符
[abc] [^abc]字符集内的任一个 / 字符集之外的任一个
a|b或:匹配 a 或 b
( )捕获分组,替换串里用 $1 引用
(?: )只分组不捕获,不计入编号
(?<name> )命名分组,替换串里用 $<name> 引用
(?= ) (?! )前瞻:后面是 / 不是某内容(只判断,不消耗字符)
(?<= ) (?<! )后顾:前面是 / 不是某内容
\b单词边界,常用于精确匹配整个单词

贪婪是默认的,懒惰要显式写

量词默认贪婪:<.+> 匹配 <a><b> 时会一口吃掉整串,只留下一个命中;把量词改成懒惰的 <.+?> 才会得到两个命中。这是「明明写了却匹配不到想要的部分」最常见的原因——不是规则错了,是它吃得太多了。

捕获组与替换引用

替换串里的 $1$2 依次对应第 1、2 个捕获分组,$& 代表整个命中,$<name> 引用命名分组。把日期从 2026/09/21 换成 2026-09-21,用 (\d{4})\/(\d{2})\/(\d{2}) 匹配、$1-$2-$3 替换即可;左下角的明细里能看到每个分组实际吃到了什么,分组数和引用编号对不上时一眼就能发现。

灾难性回溯:唯一会让页面卡住的写法

形如 (a+)+b 这种「量词套在可能重复的分组上」的写法,在匹配失败时会尝试指数级多的组合。文本稍微长一点,正则引擎就会跑上几分钟甚至把浏览器标签页拖死。这类规则并不罕见,往往是从别处抄来、看着挺正常的表达式。如果页面在某个正则上变慢,先怀疑这个:把嵌套量词拆开、用更具体的字符集(如 [^"]* 代替 .*)通常就能解决。

关于数据安全

匹配与替换全部由这个页面里的 RegExp 完成,没有任何内容发往服务器。日志行、用户数据、接口响应这类包含手机号与订单号的内容,可以放心粘进来试——本站的在线工具都做成纯前端,正是为了这一点。

和其他工具配合

如果匹配的对象是接口响应,先用JSON 在线工具展开会更易读;正则里要匹配的字符本身带 % 转义时,可以先用URL 编解码还原出原文再写表达式。