正则表达式在线测试
在线正则表达式测试工具,实时高亮显示匹配结果,列出每一处匹配的位置与捕获分组,支持 g/i/m/s 等标志与替换预览,全部在浏览器本地运行。
这个正则测试工具能做什么
正则表达式写起来容易、调起来头疼:多一个反斜杠含义就变了,贪婪和非贪婪差一个问号结果就完全不同,而很多编辑器只告诉你「匹配成功」,不告诉你匹配到了哪一段、位置在哪、分组取到了什么。这个工具就是把这些信息全部摊开给你看:
- 实时高亮:改一个字符就立刻重新匹配,匹配到的内容在原文里黄底标出,一眼就能看出「多吃了几个字」还是「漏了一段」。
- 逐处明细:每一处匹配的位置区间、长度、完整匹配内容,以及每个捕获分组分别取到了什么。分组没参与匹配时会明确标出「未参与匹配」,而不是显示成空白让你误以为取到了空字符串。
- 命名分组:用
(?<name>...)写法的分组会按名字列出,方便读复杂正则。 - 替换预览:填上替换串就能看到替换后的全文,支持
$1、$2、$&等原生写法,改分组编号时可以立刻确认有没有取错组。 - 零长度匹配可见:像
a*这类能匹配空串的正则,在普通编辑器里几乎看不出来匹配到了什么,这里会用一根橙色竖线标出位置。
怎么用
- 在「正则表达式」里填规则,不用写两边的斜杠——填
\d{6}即可,不要填/\d{6}/。 - 勾选需要的标志。
g是固定开启的:不开全局匹配只能找到第一处,对调试没有帮助。 - 把日志、代码或文章粘到「测试文本」里,结果会实时更新,不用点按钮。
- 需要看替换效果时,在「替换预览」里写上替换串。
- 点「填个示例」可以先看一个能跑的完整例子,再改成自己的内容。
常见问题
为什么我的正则匹配不到任何内容?
按出现频率排查这四种:一是少了反斜杠,想匹配数字要写 \d 而不是 d,想匹配点号要写 \.;二是大小写问题,勾上 i 标志即可忽略大小写;三是想跨行却被换行挡住了,点号默认不匹配换行,需要勾 s 标志,或把 . 换成 [\s\S];四是中文和 emoji 匹配不全,勾上 u 标志让引擎按 Unicode 字符处理。另外注意锚点 ^ 和 $ 默认匹配的是整段文本的开头和结尾,要让它匹配每一行的首尾得勾 m。
贪婪和非贪婪有什么区别,为什么我写 .* 总是吃太多?
量词默认是贪婪的:.* 会尽可能多地把后面的内容全吃进去,所以从 <a>1</a><a>2</a> 里用 <a>.*</a> 匹配,拿到的是整个字符串而不是两段。在量词后面加一个问号就变成非贪婪,也就是能用少的就不用多的:写成 <a>.*?</a> 就会匹配出两段。反过来,有时候你希望它多吃一点,那就在结尾加上明确的边界字符,比如用 <a>[^<]*</a> 这种「排除法」写清楚什么时候必须停。
为什么匹配次数那里显示「2000+」?
因为你的正则匹配得太多了,超过了页面单次渲染的上限(2000 处)。这不是正则写错了,而是浏览器把几十万处高亮同时画出来会直接卡死,所以工具主动截断并给出提示,匹配条数和明细都只显示前 2000 处。想完整统计,请把测试文本分段处理,或者给正则加更具体的限定条件缩小匹配范围——通常匹配数异常多,本身就说明规则写得太宽了。
我输入的正则和文本会被上传吗?
不会。所有匹配都是在你自己的浏览器里完成的,用的是浏览器内置的正则引擎,页面不会把正则、测试文本或替换串发送到任何服务器。这一点对调试含密钥、内网地址、用户数据的日志尤其重要——你可以放心地整段粘进来。本站也没有账号体系和登录,关掉页面后这些内容不会被保存。