Кто поможет с string.replace (JS)?

175
14 июля 2017, 06:11
    // Исходная строка
    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

Answer 1

После первой замены 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 и т.д.

READ ALSO
Как в curl отправить данные request payload?

Как в curl отправить данные request payload?

Здравствуйте! В отладчике хрома вижу response с нужными мне параметрами

302
Запись регулярно выражения Mysql

Запись регулярно выражения Mysql

Вот пример регулярного выражения

182
Изменить белый цвет фона изображения

Изменить белый цвет фона изображения

Как заменить фон белого цвета картинки средствами php?

281
Ошибка при миграции OpenCart

Ошибка при миграции OpenCart

ПриветПеренёс свой свйт OpenCar с shared-хостинга на VPS, изменил конфиг

166