← 全部工具

数据不出浏览器

正则表达式在线测试

免费 regex tester。输入模式与标志,实时查看匹配次数与高亮结果。

匹配 2 处
Contact us at ⟦[email protected]⟧ or ⟦[email protected]⟧ today.

上线之前先测模式

多数正则 bug 不是语法错误,而是「匹配过多」。未锚定的模式会在任意位置找到子串,所以四位数模式会欣然命中更长数字的中间部分;而贪婪通配符会一路吃到后面那个记号最后一次出现的位置,而不是第一次。

要用「本该失败」的字符串测试。一个有十个通过用例、没有任何反例的模式等于没测;真正有信息量的是那些接近正确的输入——比如缺少顶级域名的地址、分隔符写错的日期——因为宽松的模式最可能在这里误判通过。

当心灾难性回溯。嵌套量词遇到不匹配的输入可能耗时呈指数增长,把校验接口变成拒绝服务的入口。优先使用具体的字符类和锚定,避免嵌套重复;模式来自代码之外时,还要限制输入长度。

常见问题

支持哪些标志?
常用 g、i、m、s、u 等 JavaScript RegExp 标志。
非法正则会怎样?
会显示语法错误,不会中断页面。
文本会上传吗?
不会。匹配在浏览器本地执行。
贪婪匹配和懒惰匹配有什么区别?
贪婪量词尽量多取,只把后面模式必须的部分吐回来;懒惰量词则尽量少取。差异在标记语言里最明显:贪婪模式会从第一个开标签一路跨到最后一个闭标签,懒惰模式则在第一对标签处停下。
怎么匹配邮箱地址?
把模式放宽一点。试图实现完整规范的严格模式会拒掉合法地址,而且难以维护;只检查「有没有 @ 且两侧有内容」的简单模式反而能抓出真正的拼写错误。真正的验证应该靠发一封确认邮件。
什么是先行断言和后行断言?
它们断言匹配位置旁边有什么或没有什么,但不消耗字符,因此可以要求「字符串里某处有数字」同时把实际匹配锚定在别处。各引擎支持程度不一,依赖之前请确认目标运行时支持这种写法。

相关工具