gpt4 book ai didi

javascript - 将变量传递给.replace,如何使var与replace一起使用?

转载 作者:行者123 更新时间:2023-11-28 21:10:32 25 4
gpt4 key购买 nike

我有以下内容:

var r = ':-)'

html = html.replace(/r/g,"<img src=\""+icon_folder+"/face-"+emoticon+".png\" class=\"emoticonimg\" />");

我想添加 /g 以便替换所有匹配项。这不起作用,但如果我删除 g 并执行以下操作:

html = html.replace(r,"<img src=\""+icon_folder+"/face-"+emoticon+".png\" class=\"emoticonimg\" />");

这个有用吗?我怎样才能让它与“g”一起工作,以便所有内容都被替换?谢谢

最佳答案

正则表达式语法

/expr/flags

是一个文字语法。也就是说,您不能在其中包含变量,就像您不能在字符串文字中包含变量一样。所以你的表达式 /r/g 没有使用你的 r 变量,它正在寻找字母“r”。

构造正则表达式的另一种方法是使用 RegExp() 构造函数:

new RegExp(exprString, flags)

参数是字符串,因此您可以传递变量或字符串文字。

var r = ':-\\)';         // note: need to escape the )

html = html.replace(new RegExp(r, "g"),"<img src=\""+icon_folder+
"/face-"+emoticon+".png\" class=\"emoticonimg\" />");

您的第二个代码块起作用的原因是因为您没有将正则表达式传递给 .replace() - 它没有正则表达式文字的正斜杠,这意味着您刚刚传递了您的 r 变量。

请注意,使用 new RegExp 通常会比正则表达式文字更复杂,因为反斜杠在正则表达式中具有特殊含义,但在字符串中也具有特殊含义。因此,例如, /\d/ 最终将成为 new RegExp("\\d") - 即反斜杠需要加倍。 (我相信您可以想象长正则表达式会变得多么困惑。)在您的情况下,您的正则表达式包含一个也需要转义的右括号,因此您的字符串最终为 ':-\\) '

如果您的 r 变量始终具有硬编码值,您也可以说:

var r = /:-\)/g;    // note: have to escape the )

然后将 r 传递给 .replace()

关于javascript - 将变量传递给.replace,如何使var与replace一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com