【问题标题】:How to change this regex replace from replacing a single word to replacing an array of words?如何将此正则表达式替换从替换单个单词更改为替换单词数组?
【发布时间】:2019-01-31 14:16:58
【问题描述】:

我已经搜索过,但无法根据我的代码调整任何内容。我正在尝试将var toReplace = "warming" 制作成数组var toReplace = ['global', 'warming'],因此它将用 var newWord 替换输入中数组中的每个单词,它只是将单词包装在一个跨度中。感谢您的帮助!

if (temperature > 90) {
    var input = 'ITS GLOBAL EFFING WARMING';
    var toReplace = "WARMING";
    var emphasisColor = 'cyan';
};

var newWord = `<span style="color: ${emphasisColor}">${toReplace}</span>`;
var regEx = new RegExp(toReplace,"g");
var output = input.replace(regEx, newWord);

【问题讨论】:

    标签: javascript arrays regex replace


    【解决方案1】:

    join| 交替使用,这样数组中的任一单词都会匹配。还要确保使用i 标志使其不区分大小写。

    还将$&amp; 放在替换字符串 中以回显匹配的字符串(例如,当匹配GLOBAL 时,结果是&lt;span style="color: cyan"&gt;GLOBAL&lt;/span&gt; 而不是&lt;span style="color: cyan"&gt;global,warming&lt;/span&gt;

    var input = 'ITS GLOBAL EFFING WARMING';
    var toReplace = ['global', 'warming']
    var emphasisColor = 'cyan';
    
    var regEx = new RegExp(toReplace.join('|'),"gi");
    var output = input.replace(regEx, `<span style="color: ${emphasisColor}">$&</span>`);
    console.log(output);

    当然,这取决于toReplace 没有任何特殊字符。如果它不仅可以包含单词字符,您可以先replace-escape它们。

    【讨论】:

      【解决方案2】:

      您可以使用forEach 为数组中的每个元素执行一个函数:

      if (temperature > 90) {
          var input = "ITS GLOBAL EFFING WARMING";
          var toReplace = ["GLOBAL", "WARMING"];
          var emphasisColor = "cyan";
      };
      toReplace.forEach((element, index) => {
          regEx = new RegExp(element, "gi");
          input = input.replace(regEx, `<span style="color: ${emphasisColor}">${toReplace[index]}</span>`);
      });
      

      您也可以使用for 循环而不是forEach 来获得相同的结果。

      编码愉快! :)

      【讨论】:

      • @CertainPerformance 建议更好,并且不需要 forEach
      猜你喜欢
      • 2020-01-06
      • 2022-12-10
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 2019-07-29
      • 1970-01-01
      相关资源
      最近更新 更多