Замена захваченных групп в строке с помощью regex

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если необходимо произвести замену в определённых группах строки, вы можете использовать метод replace() с регулярным выражением, включающим скобки для группировки и функцию замены. Это позволяет осуществить точечные действия над группами и модифицировать их содержимое.

Пример:

JS
Скопировать код
const str = "123-456";
// Начинаем проигрывать саундтрек из фильма "Пятница 13-е" 🎵
const swapped = str.replace(/(\d+)-(\d+)/, (match, g1, g2) => `${g2}-${g1}`);
console.log(swapped);  // "456-123"

В данном контексте (\d+) захватывает числа до и после дефиса, а g1 и g2 обозначают захваченные группы, которые мы меняем местами.

Кинга Идем в IT: пошаговый план для смены профессии

Продвинутые приемы: станьте ниндзя регулярных выражений

Простая замена подходит для начинающих, но истинные мастера применяют продвинутые методы замены.

Прямой и обратный просмотр: поддержка везде разнится

В современном JavaScript прямые (lookaheads) и обратные (lookbehinds) просмотры работают с контекстом. Они предоставляют возможность использовать условия, не включая лишние символы в захваченную группу.

JS
Скопировать код
const str = "Заказ #123, ID #456";
// В настоящее время кто запоминает цифры?
const replaced = str.replace(/(?<=#)\d+/g, "XYZ");
console.log(replaced);  // "Заказ #XYZ, ID #XYZ"

Тем не менее, следует помнить, что старые версии браузеров могут не поддерживать обратные просмотры. Не забывайте проверять совместимость различных функциональных особенностей.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Функции преобразования: играем с регулярными выражениями

Функции преобразования регулярных выражений упрощают управление процедурой замены, особенно при работе с множеством захваченных групп.

JS
Скопировать код
const str = "Сегодня 2023-03-15";
// Преобразуем дату для американского ПО в европейский формат!
const formatted = str.replace(/(\d{4})-(\d{2})-(\d{2})/, (match, year, month, day) => `${day}/${month}/${year}`);
console.log(formatted);  // "Сегодня 15/03/2023"

За рамками регулярных выражений: манипулируем строками

Если задача по замене выходит за пределы возможностей регулярных выражений, разбейте строку на массивы и затем соедините их обратно.

JS
Скопировать код
const str = "CamelCaseString";
// Представим в стиле snake_case. Шшш...
const result = str
  .split(/(?=[A-Z])/)
  .map(word => word.toLowerCase())
  .join('_');
console.log(result);  // "camel_case_string"

И вуаля, перед нами настоящий snake_case!

Покорение сферы регулярных выражений

Становление мастером регулярных выражений требует не только знания их синтаксиса, но и умения справляться с его сложностями. Вот несколько стратегий для идеального использования групп захвата.

Невидимая сила: группы без захвата

Используйте группы без захвата (?:...), чтобы создавать группы для сопоставления, которые не требуют захвата. Они находятся внутри, но их как будто и нет!

От "совпадения" к "группе": имеем дополнительные массивы

Используйте .match() в сочетании с манипуляциями массива, когда .replace() не может справиться с задачей. Это даст вам возможность держать ваши захваченные группы под полным контролем.

Ленивые квантификаторы: краткость – сестра таланта

Хотите ограничить захват до необходимого минимума? Сделайте шаблоны ленивыми с помощью ?, чтобы избежать жадных регулярных выражений, поглощающих ваш код.

JS
Скопировать код
const str = "<div>Привет</div><div>Мир</div>";
// Давайте добавим стиля и превратим div в более модный p!
const replaced = str.replace(/<div>(.*?)<\/div>/g, "<p>$1</p>");
console.log(replaced);  // "<p>Привет</p><p>Мир</p>"

Используем флаг 'g': замены по всей строке

Флаг 'g' обеспечивает замену по всей строке, а не только на первом найденном совпадении. Каждый участок строки, соответствующий шаблону, будет преобразован.

Уровень босса: визуализация

Преобразование абстрактных понятий в наглядные образы упрощает восприятие и работу с регулярными выражениями.

Markdown
Скопировать код
Исходные данные: [🧵"Привет"🧵, " ", 🧵"Мир"🧵]
Преобразование: **"Привет"** -> **"Здравствуй"**, **"Мир"** -> **"Вселенная"**

Давайте воссоздадим это в коде:

JS
Скопировать код
const string = "Привет Мир";
// Встречайте космический уровень приветствия!
const newString = string.replace(/(Привет)|(Мир)/g, (match, p1, p2) => {
    if (p1) return "Здравствуй";
    if (p2) return "Вселенная";
});
console.log(newString);  // "Здравствуй Вселенная"

Обратите внимание, что отдельные части изменились, а основа строки осталась прежней. Это говорит о том, что ваше мастерство использования регулярных выражений вышло на совершенно новый уровень!

Секрет кроется в мелочах

Освоение регулярных выражений включает в себя множество особенностей, а искусство их использования заключается в умении обращать внимание на детали. Вот несколько советов, которые специфичны для особенностей регулярных выражений.

Скорость имеет значение: тестируйте и сравнивайте

В вопросе производительности ключевую роль играет скорость. Используйте инструменты для тестирования производительности и сравнения кода, чтобы выбрать наиболее эффективные решения.

Знание — это сила: освойте ваши регулярные выражения

Держите важные ресурсы и документацию под рукой, словно волшебник со своими таинственными свитками. Они помогут вам распутать самые сложные регулярные выражения.

Картографирование: тестирование регулярных выражений

Используйте такие инструменты для тестирования регулярных выражений, как regex101 и jex.im, чтобы визуализировать и быстро оценивать результаты работы ваших выражений.

Чистота кода: чтение важнее всего

Несмотря на сложность регулярных выражений, старайтесь делать их читабельными. Комментируйте сложные шаблоны — ваше будущее "я" будет вам благодарно.

Полезные материалы

  1. String.prototype.replace() – JavaScript | MDN
  2. RegExr: Изучение, создание и тестирование RegEx
  3. Шпаргалка по объекту RegExp в JavaScript
  4. Прямой и обратный просмотр
  5. ES2018: Именованные группы захвата в регулярных выражениях
  6. Группы и обратные ссылки – JavaScript | MDN
  7. Регулярные выражения и их использование в JavaScript
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как можно заменить захваченные группы в строке с помощью регулярных выражений?
1 / 4