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

Javascript replace with regular expression error for $0 in IE11

我有一个字符串和消息:

str = "Test [=11=]  ";
message = "Hi %2 Hello %2" ;

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

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

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

message = "Hi Test [=13=]   Hello [=13=]  "

但在 Internet Explorer 11 中,它为

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

在 IE11 中,[=17=](str 的子字符串)正在替换为 %2。任何人都可以就此向我提出建议。

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

var str = 'Test $[=10=] $ $'

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

片段:

var str = "Test $[=11=] $ $",
    message = "Hi %2 Hello %2"

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

console.log(message)

试试这个,它会帮助你

var str = 'Test [=10=]  ';
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);