如何编写正则表达式以查找@xyz @xyz asdf?



我正在尝试用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/

最新更新