← 全部工具
数据不出浏览器
正则表达式在线测试
免费 regex tester。输入模式与标志,实时查看匹配次数与高亮结果。
匹配 2 处
Contact us at ⟦[email protected]⟧ or ⟦[email protected]⟧ today.
- #1 @14 → [email protected]
- #2 @39 → [email protected]
上线之前先测模式
多数正则 bug 不是语法错误,而是「匹配过多」。未锚定的模式会在任意位置找到子串,所以四位数模式会欣然命中更长数字的中间部分;而贪婪通配符会一路吃到后面那个记号最后一次出现的位置,而不是第一次。
要用「本该失败」的字符串测试。一个有十个通过用例、没有任何反例的模式等于没测;真正有信息量的是那些接近正确的输入——比如缺少顶级域名的地址、分隔符写错的日期——因为宽松的模式最可能在这里误判通过。
当心灾难性回溯。嵌套量词遇到不匹配的输入可能耗时呈指数增长,把校验接口变成拒绝服务的入口。优先使用具体的字符类和锚定,避免嵌套重复;模式来自代码之外时,还要限制输入长度。
常见问题
- 支持哪些标志?
- 常用 g、i、m、s、u 等 JavaScript RegExp 标志。
- 非法正则会怎样?
- 会显示语法错误,不会中断页面。
- 文本会上传吗?
- 不会。匹配在浏览器本地执行。
- 贪婪匹配和懒惰匹配有什么区别?
- 贪婪量词尽量多取,只把后面模式必须的部分吐回来;懒惰量词则尽量少取。差异在标记语言里最明显:贪婪模式会从第一个开标签一路跨到最后一个闭标签,懒惰模式则在第一对标签处停下。
- 怎么匹配邮箱地址?
- 把模式放宽一点。试图实现完整规范的严格模式会拒掉合法地址,而且难以维护;只检查「有没有 @ 且两侧有内容」的简单模式反而能抓出真正的拼写错误。真正的验证应该靠发一封确认邮件。
- 什么是先行断言和后行断言?
- 它们断言匹配位置旁边有什么或没有什么,但不消耗字符,因此可以要求「字符串里某处有数字」同时把实际匹配锚定在别处。各引擎支持程度不一,依赖之前请确认目标运行时支持这种写法。