Модульні уроки (2/4)
Базова заміна та `$1`
У JavaScript String.prototype.replace(regex, replacement) виконує a
збіг шаблону та замінює кожен збіг заданим рядком. З 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 спроб