Уроки модуля (2/4)
Базовая замена и `$1`
В JavaScript String.prototype.replace(regex, replacement) выполняет
совпадение с шаблоном и заменяет каждое совпадение заданной строкой. С помощью g
отметьте, что он заменяет все совпадения; без него только первое. replaceAll
вызывает глобальное поведение (и требует наличия флага g в регулярном выражении).
'ciao mondo'.replace(/o/g, '0'); // "cia0 m0nd0"
'Mario Rossi'.replace(/(\w+) (\w+)/, '$2 $1'); // "Rossi Mario"Ссылки в строке замены
Внутри строки замены они особенные:
$1,$2, \u2026 — обратная ссылка на нумерованную группу регулярного выражения.$<name>-- обратная ссылка на именованную группу.$&-- весь матч.- `$`` -- текст перед совпадением.
$'-- текстовое сообщение после совпадения.$$-- один литерал$.
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.
Попробуйте это
Найдите каждую дату в формате ГГГГ-ММ-ДД с тремя группами (год, месяц, день). Таким образом, вы можете использовать замену для получения ДД/ММ/ГГГГ.
Показать подсказку
Замените \\d+ на \\d{4}, \\d{2}, \\d{2} внутри трёх групп, захваченных с помощью (...).
Решение доступно после 3 попыток
Обзор упражнения
Найдите «первый последний» как две именованные группы «nome» и «cognome», чтобы вы могли переписать его как «cognome, nome», используя «$<cognome>, $<nome>».
Показать подсказку
Используйте (?<nome>\\w+) и (?<cognome>\\w+), разделенные \\s+.
Решение доступно после 3 попыток
Дополнительная задача
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 попыток