我目前有以下代码:
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>
?
答案 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>'
。