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.
'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
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).
'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
Trova ogni numero intero nel testo. (In replace passeresti `(m) => Number(m) * 2` per raddoppiarlo.)
Mostra suggerimento
Usa \\d+ (uno o piu' cifre) per catturare ogni numero intero come singolo match.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Trova ogni email (forma semplificata: lettere/cifre/punti/underscore @ dominio). Cosi' una callback potrebbe redigerla in `***@dominio`.
Mostra suggerimento
Allarga la classe a [\\w.]+ per accettare punti nel nome utente e nel dominio.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Matcha ogni parola composta da lettere nel testo per poterla trasformare in maiuscolo tramite callback.
Mostra suggerimento
Trova lettere semplici con [a-zA-Z]+.
Soluzione disponibile dopo 3 tentativi