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

标签 javascript regex

我有以下内容:

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/

相关文章:

python - 如何使用python3分割字符串

c# - 帮助解析字符串(可能使用正则表达式)

javascript - 将键值对添加到 javascript 中的对象数组?

javascript - jqGrid 在按钮单击时动态更改搜索运算符类型

javascript - 表格标签内的 HTML 标题标签的浏览器问题

php - 电子邮件验证正则表达式问题

javascript - 未捕获的类型错误 : Object [object DOMWindow] has no method 'replace'

javascript - jQuery 选择排序更改页面刷新时显示的选项。发生了什么?

c# - 为什么静态 RegEx 比实例 RegEx 慢?

c++ - 使用 boost 正则表达式库有什么问题?