如何将这种正则表达式替换从替换单个单词更改为替换单词数组?

时间:2018-08-25 09:04:58

标签: javascript arrays regex replace

我已经搜索过,但是无法对我的代码进行任何修改。我正在尝试将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);

2 个答案:

答案 0 :(得分:6)

join|之间交替,以便数组中的任何一个单词都匹配。另外,请确保使用i标志使其不区分大小写。

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

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将它们全部。

答案 1 :(得分: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来获得相同的结果。

快乐编码! :)