正则在线测试
边写边看命中位置,由浏览器自带的正则引擎执行,输入不出本机
怎么用
- 在正则输入框里写表达式,下面两栏会立刻跟着更新——不需要点任何「运行」按钮。
- 左侧粘要匹配的文本,右侧把命中的片段标黄;左下角逐条列出每处命中的位置与捕获组。
- 要看替换效果,在「替换为」里写替换串(
$1引用第一个分组),点「替换」得到预览。 - 匹配始终是全局的(相当于带
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 编解码还原出原文再写表达式。