如何在JavaScript中执行不区分大小写的替换?

时间:2018-09-05 01:13:12

标签: javascript node.js regex

我目前有以下代码:

const pattern = "quick";
const re = new RegExp(pattern, "gi");

const string = "The quick brown fox jumped over the lazy QUICK dog";

const replaced = string.replace(pattern, "<b>" + pattern + "</b>");

console.log(replaced);

它产生以下内容:

The <b>quick</b> brown fox jumped over the lazy QUICK dog

我想要的是:

The <b>quick</b> brown fox jumped over the lazy <b>QUICK</b> dog

我有两个问题。

首先,为什么我在使用不区分大小写的正则表达式时不替换QUICK

第二,如何确保将QUICK替换为<b>QUICK</b>而不是<b>quick</b>

1 个答案:

答案 0 :(得分:5)

您需要将<b>$&</b>作为第二个参数传递给.replace,以插入匹配的子字符串:

const string = "The quick brown fox jumped over the lazy QUICK dog";
console.log(
  string.replace(/quick/gi, '<b>$&</b>')
);

您的QUICK不会被替换为原始代码,因为

const replaced = string.replace(pattern, 

正在传递 pattern ,它是一个 string ,而不是您构造的正则表达式(其变量名称为re)。如果您通过了re,则会看到:

const pattern = "quick";
const re = new RegExp(pattern, "gi");
const string = "The quick brown fox jumped over the lazy QUICK dog";
const replaced = string.replace(re, "<b>" + pattern + "</b>");
console.log(replaced);

它不保留原始大小写,因此需要'<b>$&</b>'