Перейти к основному содержимому
Модуль 7 · Урок 2 из 426/32 в курсе~10 min
Уроки модуля (2/4)

Базовая замена и `$1`

В JavaScript String.prototype.replace(regex, replacement) выполняет совпадение с шаблоном и заменяет каждое совпадение заданной строкой. С помощью g отметьте, что он заменяет все совпадения; без него только первое. replaceAll вызывает глобальное поведение (и требует наличия флага g в регулярном выражении).

JS
'ciao mondo'.replace(/o/g, '0'); // "cia0 m0nd0"
'Mario Rossi'.replace(/(\w+) (\w+)/, '$2 $1'); // "Rossi Mario"

Ссылки в строке замены

Внутри строки замены они особенные:

  • $1, $2, \u2026 — обратная ссылка на нумерованную группу регулярного выражения.
  • $<name> -- обратная ссылка на именованную группу.
  • $& -- весь матч.
  • `$`` -- текст перед совпадением.
  • $' -- текстовое сообщение после совпадения.
  • $$ -- один литерал $.
JS
const data = '2024-03-15';
data.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3/$2/$1');
// "15/03/2024"

Переформатируйте дату, инвертировав порядок. Регулярное выражение имеет 3 группы, и в заменяющую строку вы ссылаетесь на них как $1, $2, $3.

Специальные ссылки в заменах

Помимо $1 и $2, вы можете использовать $& для вставки всего совпадающего текста, $ for all text preceding the match, and$'` для всего текста, следующего за ним. Это позволяет выполнять богатые замены даже без написания кода JS.

Попробуйте это

Упражнение#regex.m7.l2.e1
Попыток: 0Загрузка…

Найдите каждую дату в формате ГГГГ-ММ-ДД с тремя группами (год, месяц, день). Таким образом, вы можете использовать замену для получения ДД/ММ/ГГГГ.

Загрузка редактора…
Показать подсказку

Замените \\d+ на \\d{4}, \\d{2}, \\d{2} внутри трёх групп, захваченных с помощью (...).

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#regex.m7.l2.e2
Попыток: 0Загрузка…

Найдите «первый последний» как две именованные группы «nome» и «cognome», чтобы вы могли переписать его как «cognome, nome», используя «$<cognome>, $<nome>».

Загрузка редактора…
Показать подсказку

Используйте (?<nome>\\w+) и (?<cognome>\\w+), разделенные \\s+.

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#regex.m7.l2.e3
Попыток: 0Загрузка…

Create a capture pattern to reverse the order of first and last name from `Lastname, Firstname` format to `Firstname Lastname`.

Загрузка редактора…
Показать подсказку

Use two capture groups for last and first name; the replacement will be performed via $2 $1.

Решение доступно после 3 попыток