Перейти до основного вмісту
Модуль 7 · Урок 3 із 427/32 у курсі~12 min
Модульні уроки (3/4)

Замінити зворотним викликом

Якщо рядка заміни недостатньо, передайте функцію: str.replace(regex, (match, ...groups) => string). Викликається зворотний виклик для кожного збігу, і його повернуте значення стає заміною.

JS
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% VAT)

Аргументи зворотного виклику

JS
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);
  • match -- весь матч.
  • p1, p2, \u2026 -- захоплені групи по порядку.
  • offset -- індекс збігу в оригінальному рядку.
  • original -- весь рядок.
  • groups -- об'єкт із іменованими групами (якщо такі є).
JS
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"

Зворотний виклик дає вам довільну силу: аналіз, пошук, перетворення, HTML екранування\u2026 усього, чого не може зробити статичний рядок.

Розширені аргументи в зворотних викликах заміни

Функція зворотного виклику отримує кілька аргументів: повний збіг, кожну захоплену групу, зсув збігу в межах усього тексту та оригінальний вхідний рядок. Це забезпечує складну контекстну логіку перетворення.

Спробуйте

вправи#regex.m7.l3.e1
Спроби: 0Завантаження…

Знайдіть усі цілі числа в тексті. (У заміні ви передасте `(m) => Number(m) * 2`, щоб подвоїти його.)

Завантаження редактора…
Показати підказку

Використовуйте \\d+ (одну або кілька цифр), щоб захопити кожне ціле число як окремий збіг.

Рішення доступне після 3 спроб

Повторна вправа

вправи#regex.m7.l3.e2
Спроби: 0Завантаження…

Знайдіть усі електронні листи (спрощена форма: літери/цифри/крапки/підкреслення @ домен). Таким чином зворотний виклик може змінити його на `***@domain`.

Завантаження редактора…
Показати підказку

Розширте клас до [\\w.]+, щоб приймати крапки в імені користувача та домені.

Рішення доступне після 3 спроб

Додатковий виклик

вправи#regex.m7.l3.e3
Спроби: 0Завантаження…

Match every word consisting of letters in the text, so it can be transformed to uppercase via a callback.

Завантаження редактора…
Показати підказку

Знайдіть прості літери за допомогою [a-zA-Z]+.

Рішення доступне після 3 спроб