在IE11中,Javascript替换为$ 0的正则表达式错误

时间:2016-12-11 05:16:25

标签: javascript regex internet-explorer-11

我有一个字符串和消息:

str = "Test $0 $1 $2";
message = "Hi %2 Hello %2" ;

现在我想将所有%2替换为str。我正在使用如下的RegExp,

message = message.replace(new RegExp("%2" , "g"), str);

它在Chrome和Firefox中运行良好,消息按预期发布

message = "Hi Test $0 $1 $2 Hello $0 $1 $2"

但是在Internet Explorer 11中,它为

之类的消息提供了不正确的值
message = "Hi Test %2 $1 $2 Hello %2 $1 $2"

在IE11中,$0(str的子字符串)将替换为%2。任何人都可以就此提出建议。

2 个答案:

答案 0 :(得分:2)

在替换字符串(String#replace的第二个参数)中,美元符号$提供特殊功能,因此必须使用前面的美元符号对每个字符进行转义。因此,您的str应为:

var str = 'Test $$0 $$1 $$2'

我不认为美元符号的确切功能目前与您太相关,但如果您想了解更多有关其服务目的的信息,可以访问this documentation page on the Mozilla Development Network

<强>段:

var str = "Test $$0 $$1 $$2",
    message = "Hi %2 Hello %2"

message = message.replace(/%2/g, str)

console.log(message)

答案 1 :(得分:0)

试试这个,它会帮助你

&#13;
&#13;
var str = 'Test $0 $1 $2';
message = "Hi %2 Hello %2";
var regx = new RegExp("%2", "g");
if (str.indexOf("$") > 0) {
  var val = str[str.indexOf("$") + 1];
  if (val.trim() != "" && val.trim() != "$") {
    var rex = new RegExp(val, "g");
    str = str.replace(rex, "$$" + val);
  }
}
message = message.replace(new RegExp("%2", "g"), str);
alert(message);
&#13;
&#13;
&#13;