У меня есть следующий код:
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.info(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>?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам необходимо передать <b>$&</b> в качестве второго параметра в .replace, чтобы вставить совпадающую подстроку:
const string = "The quick brown fox jumped over the lazy QUICK dog";
console.info(
string.replace(/quick/gi, '<b>$&</b>')
);Ваш QUICK не заменяется в исходном коде, потому что
const replaced = string.replace(pattern,
передает шаблон, который является нить, а не вашим сконструированным регулярным выражением (имя переменной - 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.info(replaced);который не сохраняет оригинальный корпус, отсюда и необходимость в '<b>$&</b>'.
вы создали regexp
re... и никогда не используйте его ... так что вам стоит взглянуть на это - попробуйтеconst replaced = string.replace(re, "<b>" + pattern + "</b>");