⊗jsSpRERMC 127 of 294 menu

Callback nel metodo replace delle espressioni regolari in JavaScript

Il metodo replace può accettare come secondo parametro non solo una stringa, ma anche una funzione di callback, che verrà applicata per ogni corrispondenza trovata. Ogni sottostringa trovata dall'espressione regolare sarà sostituita con ciò che questa funzione restituirà proprio per quella sottostringa.

In questa funzione è possibile passare parametri: nel primo parametro verrà inserita la stringa trovata, nel secondo parametro - la prima cattura (primo gruppo), nel terzo parametro - la seconda cattura (secondo gruppo) e così via - è possibile fare tanti parametri quante sono le catture nell'espressione regolare.

Nel penultimo parametro verrà inserita la posizione della corrispondenza trovata, e nell'ultimo - l'intera stringa in cui viene effettuata la ricerca.

Vediamo come funziona tutto questo con esempi pratici.

Esempio

Sia data una stringa con numeri:

let str = '2 3 4 5';

Sostituiamo questi numeri con i loro quadrati. Per cominciare, semplicemente stampiamo i nostri numeri uno per volta nella console nella funzione di callback:

str.replace(/\d+/g, function(match) { console.log(match); });

Il nostro codice stamperà prima '2', poi '3', '4' e '5'. Cioè nella variabile match entrano sequenzialmente le stringhe trovate dall'espressione regolare.

Risolviamo il problema fino alla fine - eleviamo match al quadrato e restituiamolo con return. Risulterà che per il 2 trovato verrà restituito 4 e il 2 sarà sostituito con questo 4, per il 3 trovato verrà restituito 9 e il 3 sarà sostituito con questo 9 - e così via:

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // stamperà '4 9 16 25'

Esempio

Supponiamo ora che nella stringa ci siano costruzioni del tipo '2+3=':

let str = '2+3= 4+5= 6+7=';

Facciamo in modo che dopo l'uguale vengano inserite le somme dei numeri corrispondenti. Cioè la nostra stringa dovrebbe trasformarsi nella seguente:

'2+3=5 4+5=9 6+7=13'

Per risolvere il problema, sperimentiamo ancora - separiamo il primo e il secondo addendo in gruppi (catture) separati:

str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) { console.log(match0, match1, match2); });

E ora risolviamo definitivamente il problema: per ogni sottostringa trovata, sommiamo il primo e il secondo gruppo, prendiamo il gruppo zero (la stringa trovata, ad esempio '2+3='), aggiungiamo ad esso il risultato e restituiamo tutto tramite return:

let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) { let sum = Number(match1) + Number(match2); return match0 + sum; }); console.log(result);

Problemi pratici

Data una stringa:

let str = 'aaa [2] bbb [3] ccc [12] ddd';

Trova i numeri tra parentesi e raddoppiali. Cioè dalla nostra stringa dovrebbe risultare la seguente:

'aaa [4] bbb [6] ccc [24] ddd'

Data una stringa:

let str = '123 456 789';

Trova tutti i numeri e inverti le loro cifre in ordine inverso. Cioè dalla nostra stringa dovrebbe risultare la seguente:

'321 654 987'

Data una stringa con date:

let str = '31.12.2025 30.11.2024 29.10.2023';

Trova tutte le date e convertile in un altro formato in modo da ottenere la seguente stringa:

'2025-12-31 2024-11-30 2023-10-29'
Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta