正则表达式测试器
写一条正则表达式,实时看清它到底匹配了什么,全程在浏览器里完成。
这款正则表达式测试器让你构建一个正则,并对着你自己的文本即时验证。你一边输入模式,匹配就在样本文本里高亮起来,计数器显示找到了多少个,任何捕获组都被拆分出来,好让你精确看到模式的每一部分抓到了什么。全部在浏览器里运行,你的文本绝不上传。
正则表达式很强大,却也出了名地磨人,把它写对的最快办法,就是看着它在真实输入上工作。切换一个标志、微调一个字符类,看着高亮立即更新,就把反复试错变成了一件又快又直观的事。
这个测试器使用 JavaScript 的正则表达式引擎,也就是每个浏览器都内置的那个。这让它非常适合为 Web 代码写正则的人,但值得了解它的流派,因为在 Python 或 PCRE 等不同正则引擎里,模式的行为会略有差异。
如何使用正则表达式测试器
- 把你想搜索的文本输入或粘贴到输入区。
- 在模式字段里输入你的正则表达式。
- 切换你需要的标志,比如 g、i、m、s 或 u。
- 编辑时看着匹配实时高亮,并查看匹配数。
- 查看每个匹配的捕获组,确认模式抓到了正确的部分。
测试器给你看什么
你一改动任何东西,三样东西就即时更新:文本里高亮的匹配、找到多少个匹配的实时计数,以及每个捕获组的内容。三者一起看,不只告诉你模式匹不匹配,还告诉你它究竟在匹配和提取什么。
捕获组往往是模式悄悄出错的地方。一条正则可能整体匹配了正确的文本,某个组却抓多了或抓少了,把每个组分开显示,就能在错误进入你的代码之前把它暴露出来。
读懂各个标志
标志会改变整条模式的行为。g 标志会找出每一个匹配而不是停在第一个,i 让匹配不区分大小写,m 让行首和行尾的锚点作用于每一行而不是整个字符串。
s 标志有时叫 dotall,让点号也能匹配换行符,这对跨行的模式很方便。u 标志开启完整的 Unicode 处理。在这里把它们逐一开关,匹配高亮会重绘,让你直接看到每个标志的效果。
JavaScript 正则流派很关键
这是要牢记的诚实提醒。工具运行的是 JavaScript 正则引擎,所以你在这里构建的模式,在浏览器和 Node.js 代码里的行为完全一致,但不一定和 Python、PCRE、Java 或 .NET 里相同。
差异会体现在后行断言的支持、命名组的语法、某些 Unicode 属性转义,以及一些边界情况的处理方式上。如果你的模式最终要用在非 JavaScript 环境里,上线前请在那个引擎里测试,并把这里的结果仅视为对 JavaScript 权威。
谁在用它,为什么用
开发者天天用它:校验邮箱或电话格式、解析日志行、从杂乱字符串里提取字段,或为编辑器写一条查找替换模式。先对着真实样本把表达式写对,能省下之后的调试。
在编码之外做数据清洗时它同样有用。如果你在处理导出的数据、需要发现或剥离一个重复出现的模式,先在这里拿一块真实数据测一测正则,就能在正式跑之前确认它符合你的预期。
构建模式的技巧
从小处入手,一块一块地把模式扩大,每加一部分就检查一下高亮。看清是哪次改动弄坏了一条本来能用的模式,远比去调试一整条一次性写成的长表达式容易得多。
粘入贴近现实的样本文本,包括你想捕获或想避开的那些别扭边界情况。在整洁例子上能用的模式,一碰到真实世界的输入往往就栽跟头,所以尽早喂它那些杂乱的东西。别忘了当你想把点号、括号等特殊字符当字面量时,要给它们转义。
一切都留在你的浏览器里
你的模式和测试文本都由浏览器自己的正则引擎在本地处理。什么都不发往服务器,当你的样本数据是真实的——日志片段、客户记录,或任何你不希望离开机器的内容——这一点就很重要。
没有账号,服务器上也没有保存的历史记录。当你关闭标签页,你的模式和数据就没了,所以想留下的请复制走。这份隐私的代价,就是工具不会在两次访问之间记住你的工作。
需要注意的限制
写得不好的模式在大输入上可能很慢,尤其是那种因嵌套量词而容易发生灾难性回溯的。如果页面在一次编辑后像卡住了,请简化模式,而不是继续喂它更多文本。
这个测试器用于构建和检查表达式,不用于批量处理巨大的文件。它能从容处理相当大的样本,但它是一个把正则打磨对的工作台,之后你再把成品模式拿到自己的代码或编辑器里去跑。
常见问题
它用的是哪种正则流派?
它使用你浏览器内置的 JavaScript 正则表达式引擎。模式在浏览器和 Node.js 代码里的行为完全一致,但可能和 Python、PCRE、Java 或 .NET 不同,需要时请另行测试。
我的模式或测试文本会被上传吗?
不会。你的正则和样本文本都由浏览器自己的引擎完全在本地处理。什么都不发往服务器,所以拿真实的日志或数据样本来测试很安全。
标志 g、i、m、s、u 各有什么作用?
g 找出所有匹配,i 忽略大小写,m 让行锚点逐行生效,s 让点号匹配换行,u 开启完整 Unicode 处理。在这里切换它们,匹配高亮会即时更新。
它会显示捕获组吗?
会。对每个匹配,工具都会把捕获组拆分出来,让你确认模式的每一部分都抓到了正确的文本。这样就很容易发现某个组抓多了或抓少了。
为什么测试器有时感觉很慢?
带嵌套量词的模式可能触发灾难性回溯,在大输入上很慢。如果页面像卡住了,请简化模式而不是加更多文本,并用更小的样本来测。
它会在两次访问之间保存我的工作吗?
不会。没有账号,也没有服务器端历史。你的模式和文本只存在于打开的标签页里,关闭前请复制想留下的内容。这让工具在设计上完全私密。