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

Posted

技术标签:

【中文标题】如何将此正则表达式替换从替换单个单词更改为替换单词数组?【英文标题】: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);

【问题讨论】:

【参考方案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

以上是关于如何将此正则表达式替换从替换单个单词更改为替换单词数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何替换光标下的单个单词?

如何计算 MySQL / 正则表达式替换器中的单词?

正则表达式用特定格式 C# 替换整个单词

PHP正则表达式替换以@结尾以2个空格结尾的单词[关闭]

仅在 Lua 中使用正则表达式替换整个单词

“单词正则表达式”(语义替换) - 任何示例语法和库?