在线正则表达式测试
输入正则与测试文本,实时查看匹配结果、捕获分组与替换后的文本。 所有计算都在浏览器本地完成,不上传任何内容。
正则表达式
等待输入匹配高亮
最多展示 500 处匹配详情
替换结果
读懂一条正则表达式
正则表达式是一段描述「字符串集合」的小程序。学会读它很划算, 因为手写的解析代码几乎总是更长、更易碎。读懂的关键是别把它当普通文字从左到右念, 而要拆成一个个被量词修饰的片段。
普通字符匹配自己,所以 2026 就匹配这串字面量。字符类匹配一组字符:
\d 是任意数字,\w 是单词字符,\s 是空白,
[a-f0-9] 则是自定义集合。量词说明前面的片段重复多少次:
* 零次或多次,+ 一次或多次,? 可有可无,{2,4} 指定范围。
量词默认是贪婪的,会尽可能多吃字符,加一个 ? 变成惰性(.*?)就会尽可能少吃,
这是「匹配到了整行而不是想要的那一小段」的典型原因。
分组同时承担两件事:让量词作用于一整段((ab)+),
以及把匹配到的内容捕获下来供后面引用——本页的「捕获分组」面板显示的就是它,
替换框里的 $1 引用的也是它。如果只需要分组、不需要捕获,
在开头加 ?:((?:ab)+)即可,既省内存也让捕获编号更清晰。
标志决定引擎行为,多数「结果不对」都出在这里。没有 g 时正则只找第一个匹配就停下,
所以「明明有很多个却只匹配到一个」几乎都是漏了 g;i 忽略大小写;
m 让 ^ / $ 匹配每行的首尾而不是整段文本的首尾;
s 让 . 也能跨过换行;y 则要求从上一次的位置连续匹配。
需要警惕的是灾难性回溯:(a+)+ 这类嵌套量词遇到「差一点就能匹配」的长文本时,
引擎要尝试的分支数量会指数级膨胀,直接把标签页卡死。
如果某个正则在大文本上明显变慢,优先简化嵌套量词、加上锚点,或把任务拆成两遍。
本页直接使用浏览器自带的 JavaScript 正则引擎,你在页面上测到的行为就是代码里的行为, 不存在「服务器版正则」的差异;匹配、分组与替换全部在本地完成,文本不会上传。
常用正则速查
\d{4}-\d{2}-\d{2}:匹配日期;^1[3-9]\d{9}$:手机号。[\w.+-]+@[\w-]+\.[\w.]+:邮箱;https?://\S+:URL。^[\u4e00-\u9fa5]+$:纯中文;\s+:连续空白。- 替换中
$&为整段匹配,$1/$2为对应捕获分组。 - 开启 g 后可执行全局替换;开启 m 后
^/$匹配每行首尾。