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.
'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
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ă).
'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ă
Găsiți fiecare număr întreg din text. (În înlocuire, ați trece `(m) => Number(m) * 2` pentru a-l dubla.)
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
Găsiți fiecare e-mail (formă simplificată: litere/cifre/puncte/subliniere @ domeniul). În acest fel, un apel invers ar putea redacta în `***@domain`.
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ă
Match every word consisting of letters in the text, so it can be transformed to uppercase via a callback.
Afișează indiciu
Găsiți litere simple cu [a-zA-Z]+.
Soluție disponibilă după 3 încercări