求检测合法@用户提及的正则表达式:排除多@等非法匹配场景
适配需求的正则方案
最终正则(支持ES2018及以上JS环境,支持零宽后行断言)
/(?<=^|\s)(@[a-zA-Z]+\b)(?!;)/
兼容低版本JS的正则(无后行断言)
/(?:^|\s)(@[a-zA-Z]+\b)(?!;)/
取第一个捕获组的内容即可得到合法的@提及内容。
规则说明&场景验证
各部分规则对应你的约束:
(?<=^|\s):要求@必须出现在字符串开头,或紧跟空白字符,直接排除hey@username这类前缀带普通字符的非法场景@[a-zA-Z]+\b:要求@后面只能跟英文字母,且匹配到单词边界截止- 自动排除
@@username:@后面紧跟的是@不是字母,无法匹配 - 自动排除
@usern@name:匹配到@usern时后续是@不是单词边界,无法完成匹配
- 自动排除
(?!;):保留你原有规则中排除后缀带分号的逻辑
所有场景验证结果:
@username→ 匹配 ✔️ 合法@@username→ 不匹配 ❌ 非法hey @username→ 匹配 ✔️ 合法@usern@name→ 不匹配 ❌ 非法hey@username→ 不匹配 ❌ 非法
内容的提问来源于stack exchange,提问作者Billjesh Baidya
相关产品推荐
相关产品推荐

