2 回答
![?](http://img1.sycdn.imooc.com/5458683f00017bab02200220-100-100.jpg)
TA贡献2019条经验 获得超9个赞
使用像这样的字符类[a-zA-Z0-9.-]+
有点广泛匹配,因为它不能保证例如点不在末尾。它可以匹配任何列出的,因此例如--.--
也是有效的。请注意,您不必转义点,也不必转义破折号(如果它在末尾)。
第一个模式
(@[a-zA-Z0-9\.\-]+)
匹配两者,因为左侧和右侧没有设置边界。所述第二图案
[^\[](@[a-zA-Z0-9\.\-]+)
包括作为前导空间匹配由否定的字符类匹配[^\[]
该匹配不是[
在第三模式
[^\[\s](@[a-zA-Z0-9\.\-]+)
不匹配,因为现在是否定的字符类[^\[\s]
不允许匹配前导空格。该第四图案
[^.+?](@[a-zA-Z0-9\.\-]+)
相匹配的领先[
因为由匹配[^.+?]
相匹配不是一个.
,+
或?
您可以使用捕获组,该组可以匹配字符串的开头或空白字符,然后将 @ 部分与单词字符和点匹配:
(^|\s)@\w+\.\w+(?!\S)
解释
(^|\s)
捕获组 1、字符串或空白字符的开头@\w+\.\w+
Match@
,然后是 1+ 个单词字符、一个点和 1+ 个单词字符(\w
你也可以使用[a-zA-Z0-9]
(?!\S)
断言直接在右侧的不是非空白字符
在替换中使用替换后的第一个捕获组 $1Keanu
regex = /(^|\s)@\w+\.\w+(?!\S)/g;
str = 'Hey @first.last tell [@first.last] to check this out';
str = str.replace(regex, "$1Keanu");
console.log(str);
添加回答
举报