【问题标题】:replace single character with multiple characters at different positions用不同位置的多个字符替换单个字符
【发布时间】:2018-10-24 06:40:16
【问题描述】:

例如,我在 JS 中有一个字符串

var str = "hello @something and @someone ok";

我想替换以@开头的字符,例如通过正则表达式匹配模式来完成,例如

str.replace(/@([^ ]+\s[^ ]+)/g, '<a href="'+link+'"> $& </a>')

假设字符串是var str = "hello @something";,所以替换工作正常,因为它搜索@并用&lt;a href&gt;替换它,但如果字符串是var str = "hello @something and @someone ok";,那么首先它用正确的href替换@something,然后用正确的href 替换@someone,最终将@something 的href 更改为@someone 的href。 我希望这两个值的 href 不同。

【问题讨论】:

  • var str = hello @something and @someone ok I 那是无效的语法,字符串需要在它们周围加上分隔符...
  • 那么,您希望从@something and @someone 的输入中获得什么样的输出?能举个例子吗?
  • 您能否举例说明您的输入以及您想要的输出?
  • 我想把@something 换成&lt;a href="link of something"&gt; something &lt;/a&gt;
  • 你给str.replace打过一两次电话吗?

标签: javascript string str-replace


【解决方案1】:

据我了解,您正在执行以下操作:

你存储一个包含多个@的字符串

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>');

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 2021-06-08
    • 2017-09-28
    • 2022-12-15
    • 2020-06-02
    • 1970-01-01
    • 2013-12-29
    • 2020-08-31
    • 2016-12-11
    相关资源
    最近更新 更多