Vai al contenuto
eLearner.app
Modulo 7 · Lezione 3 di 427/32 nel corso~12 min
Lezioni del modulo (3/4)

Replace con callback

Se la stringa di sostituzione non ti basta, passa una funzione: str.replace(regex, (match, ...groups) => string). La callback viene chiamata per ogni match e il suo valore di ritorno diventa la sostituzione.

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

Argomenti della callback

JS
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);
  • match -- l'intero match.
  • p1, p2, \u2026 -- i gruppi catturati in ordine.
  • offset -- indice del match nella stringa originale.
  • original -- la stringa intera.
  • groups -- oggetto con i gruppi nominati (se presenti).
JS
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"

La callback ti da' potenza arbitraria: parsing, lookup, conversione, escape HTML\u2026 tutto cio' che una stringa statica non puo' fare.

Argomenti avanzati della callback di replace

La funzione di callback riceve molteplici argomenti: il match intero, i singoli gruppi catturati, l'indice numerico del match all'interno del testo complessivo, e l'intera stringa originaria. Questo permette logiche di trasformazione sofisticate basate sul contesto.

Prova tu

Esercizio#regex.m7.l3.e1
Tentativi: 0Caricamento…

Trova ogni numero intero nel testo. (In replace passeresti `(m) => Number(m) * 2` per raddoppiarlo.)

Caricamento editor…
Mostra suggerimento

Usa \\d+ (uno o piu' cifre) per catturare ogni numero intero come singolo match.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#regex.m7.l3.e2
Tentativi: 0Caricamento…

Trova ogni email (forma semplificata: lettere/cifre/punti/underscore @ dominio). Cosi' una callback potrebbe redigerla in `***@dominio`.

Caricamento editor…
Mostra suggerimento

Allarga la classe a [\\w.]+ per accettare punti nel nome utente e nel dominio.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#regex.m7.l3.e3
Tentativi: 0Caricamento…

Matcha ogni parola composta da lettere nel testo per poterla trasformare in maiuscolo tramite callback.

Caricamento editor…
Mostra suggerimento

Trova lettere semplici con [a-zA-Z]+.

Soluzione disponibile dopo 3 tentativi