// Исходная строка
let string = 'Lorem ipsum dolor, dolor sit amet, amet consectetur adipisicing elit';
let regex = /dolor/g; // искомая подстрока (может быть каким угодно регулярным выражением, не в нём суть)
let m;
// Если массив совпадений не пуст:
if ((m = string.match(regex)) !== null) {
// Пройдёмся по полученному массиву совпадений и заменим все совпадения, на их жирное начертание
m.forEach(match => {
string = string.replace(match, `<b>${match}</b>`);
});
}
console.log(string); // `Lorem ipsum <b><b>dolor</b></b>, dolor sit amet, amet consectetur adipisicing elit`
Почему происходит оборачивание первого совпадения два раза?
Если дело в глобальной области видимости, то при замене на:
string = string.replace(new RegExp(match, 'g'), `<b>${match}</b>`);
Результат вообще такой:
Lorem ipsum <b><b>dolor</b></b>, <b><b>dolor</b></b> sit amet, amet consectetur adipisicing elit
Как получить:
Lorem ipsum <b>dolor</b>, <b>dolor</b> sit amet, amet consectetur adipisicing elit
После первой замены Lorem ipsum dolor
на Lorem ipsum <b>dolor</b>
- следующая замена опять найдет именно этот dolor
, а не следующий.
Использовать match
здесь не нужно, replace
вполне понимает, когда ей передают регулярное выражение.
Код может свестись к следующему:
// Исходная строка
let string = 'Lorem ipsum dolor, dolor sit amet, amet consectetur adipisicing elit';
let regex = /dolor/g; // искомая подстрока (может быть каким угодно регулярным выражением, не в нём суть)
string = string.replace(regex, `<b>$&</b>`);
console.log(string);
Где $&
- это подстрока полностью удовлетворяющая регулярному выражению.
При использовании групп, к ним можно обращаться как $0
,$1
,$2
и т.д.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте! В отладчике хрома вижу response с нужными мне параметрами
ПриветПеренёс свой свйт OpenCar с shared-хостинга на VPS, изменил конфиг