例如,我在JS中有一个字符串
var str = "hello @something and @someone ok";
我想替换以@开头的字符,例如通过用正则表达式匹配模式来完成此操作
str.replace(/@([^ ]+\s[^ ]+)/g, '<a href="'+link+'"> $& </a>')
假设字符串为var str = "hello @something";
,那么替换字符串在搜索@并将其替换为<a href>
时工作正常,但是如果字符串为var str = "hello @something and @someone ok";
,则首先替换@带有正确href的内容,然后用正确的href替换@someone,最终将@something的href更改为@someone的href。
我希望两个值的href都不同。
答案 0 :(得分:0)
据我了解,您正在执行以下操作:
您存储的字符串包含多个turtles-own (except for breed1) [variable1 variable2 variable3]
@
和链接
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
。然后,每个字符串将仅用正确的链接替换一次。另外,您应该更改您的正则表达式。我的建议是
@