如何在JavaScript中使replace()成为全局变量

时间:2018-08-01 15:32:45

标签: javascript regex

我知道这个问题已经问了很多时间,但是我找不到解决方案。我有一些表情符号,每个表情符号都有使用replace()呈现为笑脸的代码,但出现语法错误,我不知道为什么以及如何将我的代码:/呈现为笑脸

txt = " Hi :/ ";
txt.replace("/\:/\/g","<img src='img/smiley.gif'>");

2 个答案:

答案 0 :(得分:9)

您的正则表达式不需要用引号引起来。您应该转义正确的/前斜杠(转义了错误的斜杠)并指定替换项,因为.replace不会修改原始字符串。

txt = " Hi :/ ";
txt = txt.replace(/:\//g,"<img src='img/smiley.gif'>");

基于jonatjano的精妙演绎,我认为您应该在正则表达式中添加一些内容,以避免诸如干扰URL之类的灾难。

txt = txt.replace(/:\/(?!/)/g,"<img src='img/smiley.gif'>");

以上内容通过进行negative-lookahead确保://匹配。

答案 1 :(得分:2)

replace()的第一个参数中存在两个问题,它转义了错误的字符,并使用了一个似乎包含regex而不是真实的RegExp的字符串。

第二行应显示为:

txt.replace(/:\//g,"<img src='img/smiley.gif'>");

/:\//gregex。第一个/和最后一个RegExp是定界符,g是“全局” RegExp选项(String.replace()需要RegExp而不是进行全局替换的字符串。

regex的内容为:/(您要查找的字符串),但由于/RegExp中具有特殊含义(请参见上文),因此需要转义,它变成:\/