据我了解,您正在执行以下操作:
您存储一个包含多个@
var str = "hello @something and @someone ok";
和一个链接
var link = "stackoverflow.com";
然后你申请str.replace
这个字符串
str = str.replace(/@([^ ]+\s[^ ]+)/g, '<a href="'+link+'"> $& </a>');
结果是
"hello <a href="stackoverflow.com"> @something </a> and <a href="stackoverflow.com"> @someone </a> ok"
接下来更改链接
link = "stackoverflow.com/questions/tagged/javascript";
并str.replace
再次应用于您的字符串
str = str.replace(/@([^ ]+\s[^ ]+)/g, '<a href="'+link+'"> $& </a>');
结果是
"hello <a href="stackoverflow.com"> <a href="stackoverflow.com/questions/tagged/javascript"> @something </a> </a> and <a href="stackoverflow.com"> <a href="stackoverflow.com/questions/tagged/javascript"> @someone </a> </a> ok"
那是你的问题。要修复它,您应该g
从您的正则表达式中删除并@
在替换中删除。然后每个字符串只会被正确的链接替换一次。你也应该改变你的正则表达式。我的建议是
var str = "hello @something and @someone ok";
var link = "stackoverflow.com";
str = str.replace(/@(\w+)/, '<a href="'+link+'"> $1 </a>');
link = "stackoverflow.com/questions/tagged/javascript";
str = str.replace(/@(\w+)/, '<a href="'+link+'"> $1 </a>');