Przejdź do głównej treści
eLearner.app
Moduł 7 · Lekcja 3 z 427/32 w kursie~12 min
Lekcje modułu (3/4)

Zamiana z funkcją callback

Jeśli ciąg zamienny to za mało, przekaż funkcję: str.replace(regex, (match, ...groups) => string). Funkcja callback jest wywoływana dla każdego dopasowania, a zwracana przez nią wartość staje się zamiennikiem.

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

Argumenty funkcji callback

JS
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);
  • match -- całe dopasowanie.
  • p1, p2, … -- przechwycone grupy w kolejności ich występowania.
  • offset -- indeks dopasowania w oryginalnym ciągu znaków.
  • original -- cały ciąg znaków.
  • groups -- obiekt zawierający grupy nazwane (o ile istnieją).
JS
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"

Funkcja callback daje Ci nieograniczone możliwości: parsowanie, wyszukiwanie w słowniku, konwersję, escapowanie HTML… wszystko to, czego nie potrafi zrobić statyczny ciąg znaków.

Zaawansowane argumenty w funkcjach callback metody replace

Funkcja callback otrzymuje kilka argumentów: pełne dopasowanie, każdą przechwyconą grupę, offset dopasowania w całym tekście oraz oryginalny ciąg wejściowy. Umożliwia to stosowanie zaawansowanej logiki przekształceń opartej na kontekście.

Spróbuj sam

Ćwiczenie#regex.m7.l3.e1
Próby: 0Ładowanie...

Znajdź każdą liczbę całkowitą w tekście (w replace przekazano by `(m) => Number(m) * 2` w celu jej podwojenia).

Ładowanie edytora...
Pokaż wskazówkę

Użyj \d+ (jedna lub więcej cyfr), aby przechwycić każdą liczbę całkowitą jako pojedyncze dopasowanie.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#regex.m7.l3.e2
Próby: 0Ładowanie...

Znajdź każdy adres e-mail (postać uproszczona: litery/cyfry/kropki/podkreślenia @ domena). W ten sposób funkcja callback mogłaby go ukryć jako `***@domena`.

Ładowanie edytora...
Pokaż wskazówkę

Rozszerz klasę do [\w.]+ , aby akceptować kropki w nazwie użytkownika i domenie.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#regex.m7.l3.e3
Próby: 0Ładowanie...

Dopasuj każde słowo składające się z liter w tekście, aby mogło zostać przekształcone na wielkie litery za pomocą funkcji callback.

Ładowanie edytora...
Pokaż wskazówkę

Znajdź zwykłe litery za pomocą [a-zA-Z]+.

Rozwiązanie dostępne po 3 próbach