如何更换“?”或“&”来自Javascript中的字符串

时间:2018-05-16 10:51:19

标签: javascript regex replace

如何在以下代码中将“?test = 666& test”替换为“222”

如果我的代码有“?”或“&”,它将无效。

<body>
  hello
  <br>
  ?test=666&test

  <script>
    function rp (str, map) {
      for (var i in map) {
        str = str.replace(new RegExp(i, 'g'), map[i]);
      }
      return str;
    }

    document.body.innerHTML = rp(document.body.innerHTML, {
        'hello': '111',
        '?test=666&test': '222'
      });
  </script>
</body>

2 个答案:

答案 0 :(得分:0)

?&以及其他几个字符在正则表达式中具有特殊含义。你需要逃避它们(用\)来逐字地使用它们。

This question's answers描述了在一般情况下这样做。

使用从这些答案派生的假设escapeRegex函数,您可以:

str = str.replace(new RegExp(escapeRegex(i), 'g'), map[i]);

只需处理?&,你就可以这样做(但不要这样做,它会打开大门对于其他特殊字符):

str = str.replace(new RegExp(i.replace(/[?&]/g, "\\$&")., 'g'), map[i]);

答案 1 :(得分:0)

您需要以各种不同的方式处理转义和编码:

  1. 正则表达式中,?是修饰符。您需要将其转义并使用\?代替。
  2. javascript字符串文字中,\是一个特殊字符。要在字符串中获得单反斜杠,您需要编写'\\',并在字符串中获取\?,您需要编写'\\?'
  3. HTML 中,简单的&会转换为&amp;。要匹配该编码字符,您需要查找&amp;
  4. 这是您应该使用的结果:

    function rp(str, map) {
      for (var i in map) {
        str = str.replace(new RegExp(i, 'g'), map[i]);
      }
      return str;
    }
    document.body.innerHTML = rp(document.body.innerHTML, {
      'hello': '111',
      '\\?test=666&amp;test': '222'
    });
    <body>
      hello
      <br>
      ?test=666&test
    </body>