正则表达式中如何正确匹配句号、@符号及使用量词?
正则匹配问题解决方案
原有正则失效原因
你写的/\w[A-Z0-9a-z.-]{2,}[.]{1}[@]{1}/gm存在两个核心问题:
- 没有添加首尾锚点限制匹配范围,只会匹配字符串中符合「.后面跟1个@」的片段,不会校验整个字符串的规则。比如测试字符串
JasonP.w@@@会匹配到前半段JasonP.w@,所以出现误命中 - 没有全局限制句号和@的总数量,只校验了末尾的规则,无法保证整个字符串里只有1个句号和1个@
可用正则写法
如果要求匹配的整个字符串恰好包含1个句号、1个@,且只允许出现大小写字母、数字、连字符、句号、@,可以使用如下正则:
/^(?=[^.]*\.[^.]*$)(?=[^@]*@[^@]*$)[A-Za-z0-9.-@]+$/gm
规则说明
^和$是首尾锚点,强制匹配整个字符串,避免部分匹配的问题(?=[^.]*\.[^.]*$)是正向先行断言,限制整个字符串内只能出现1个句号(?=[^@]*@[^@]*$)同理,限制整个字符串内只能出现1个@[A-Za-z0-9.-@]+匹配允许出现的字符,可根据你的实际字符范围调整
测试结果验证
JasonP.w@:符合规则,正常匹配JasonP.w@@@:@数量超过1,不匹配Jas.onP.w@:句号数量超过1,不匹配
内容的提问来源于stack exchange,提问作者STU1
相关产品推荐
相关产品推荐

