我有以下内容:
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/