Salt la conținutul principal
Modulul 7 · Lecția 3 din 427/32 în curs~12 min
Lecții din modul (3/4)

Înlocuiți cu un apel invers

Dacă un șir de înlocuire nu este suficient, transmiteți o funcție: str.replace(regex, (match, ...groups) => string). Reapelul este invocat pentru fiecare potrivire, iar valoarea sa returnată devine înlocuitoare.

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

Argumente de apel invers

JS
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);
  • match -- întregul meci.
  • p1, p2, \u2026 -- grupurile capturate în ordine.
  • offset -- indexul potrivirii în șirul original.
  • original -- întregul șir.
  • groups -- obiect cu grupurile denumite (dacă există).
JS
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"

Reapelarea vă oferă putere arbitrară: analizare, căutare, conversie, HTML evadând\u2026 tot ceea ce un șir static nu poate face.

Argumente avansate în înlocuirea apelurilor inverse

Funcția de apel invers primește mai multe argumente: potrivirea completă, fiecare grup capturat, offset-ul potrivirii în întregul text și șirul de intrare original. Acest lucru permite o logică sofisticată de transformare bazată pe context.

Încearcă

Exercițiu#regex.m7.l3.e1
Încercări: 0Se încarcă…

Găsiți fiecare număr întreg din text. (În înlocuire, ați trece `(m) => Number(m) * 2` pentru a-l dubla.)

Se încarcă editorul...
Afișează indiciu

Utilizați \\d+ (una sau mai multe cifre) pentru a captura fiecare număr întreg ca o singură potrivire.

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#regex.m7.l3.e2
Încercări: 0Se încarcă…

Găsiți fiecare e-mail (formă simplificată: litere/cifre/puncte/subliniere @ domeniul). În acest fel, un apel invers ar putea redacta în `***@domain`.

Se încarcă editorul...
Afișează indiciu

Extindeți clasa la [\\w.]+ pentru a accepta puncte în numele de utilizator și în domeniu.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#regex.m7.l3.e3
Încercări: 0Se încarcă…

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

Se încarcă editorul...
Afișează indiciu

Găsiți litere simple cu [a-zA-Z]+.

Soluție disponibilă după 3 încercări