我正在尝试用js编写一个正则表达式来查找测试字符串,并且测试字符串是"@xyz @xyz asdf",它不应该检测到纯文本。我正在尝试
/s+([@][w_-]+[s]{0,1}([A-Za-z0-9@.]+))/
我不明白你到底想要什么,但你可以试试这个正则表达式。 我明白:
@xyz
@xyz 阿斯自卫队
/^[@]([a-z|A-Z]*)([ ]*[a-z|A-Z]*)/
/(?:@[^s$]+s){2}[w]+$/
https://regex101.com/r/1Ov6ob/1/
解释:
两次:@ 后跟非空格和非结尾中的至少一个(因此是字母、符号(
然后一个由至少一个单词字符\w组成的"单词":[a-zA-Z0-9_],或者你可能更喜欢[^\s$]。虽然在评论中你也接受了尾随空格,所以也许是 [\w\s]。根据您的真正需要调整最后一部分。
所有后跟行尾或字符串。这可以防止匹配更多行中断的内容。
我不确定你到底问什么,但根据你提供的正则表达式,一个小的修改就足够了:
var rgx = /s*@w+s?(?:w|@)+b/i;
https://regex101.com/r/X89dpx/1/
或者如果第二个单词必须有 @:
var rgx = /@w+s?(?![^@]+)[^s]*/gi;
"some long sentence @xyz @xyz asdf".match(rgx);//["@xyz @xyz"]
如果您想单独匹配@somename姓氏:
var rgx = /@w+s?(?=[^@]+)[^s]*/gi;
https://regex101.com/r/mBt2wH/2/
可以更简洁一点:
var rgx = /@w+(?:s[^s@]+)?/gi;
https://regex101.com/r/mBt2wH/3/