Passer au contenu principal
eLearner.app
Module 7 · Leçon 3 sur 427/32 dans le cours~12 min
Leçons du module (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

Exercice#regex.m7.l3.e1
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Esercizio di ripasso

Exercice#regex.m7.l3.e2
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Sfida aggiuntiva

Exercice#regex.m7.l3.e3
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives