在不同位置将单个字符替换为多个字符

时间:2018-10-24 06:40:16

标签: javascript string str-replace

例如,我在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都不同。

1 个答案:

答案 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。然后,每个字符串将仅用正确的链接替换一次。另外,您应该更改您的正则表达式。我的建议是

@