Articolo originale: https://www.freecodecamp.org/news/javascript-string-replace-example-with-regex/

Le espressioni regolari (chiamate anche RegEx o RegExp) sono un modo efficace per analizzare il testo. Con RegEx, puoi abbinare stringhe in modo tale che corrispondano a caratteri specifici (come ad esempio, JavaScript) o pattern (come ad esempio, NumeroStringsSimbolo - 3a&).

Il metodo .replace viene utilizzato su stringhe in JavaScript per sostituire parti di stringa con altri caratteri. È spesso usato in questo modo:

const str = 'JavaScript';
const newStr = str.replace("ava", "-");
console.log(newStr);
// J-Script

Come puoi vedere sopra, il metodo replace accetta due argomenti: la stringa da sostituire e con cosa verrebbe sostituita la stringa.

È qui che entra in gioco Regex .

L'uso di .replace visto ora è limitato: i caratteri da sostituire sono noti - "ava". E se invece fossimo interessati a un pattern? Forse, un numero, due lettere e la parola "pippo" o tre simboli usati insieme?

Il metodo .replace utilizzato con RegEx può raggiungere questo obiettivo. RegEx può essere efficacemente utilizzato per ricreare pattern. Quindi, combinando questo con .replace significa che possiamo sostituire i pattern e non solo i caratteri esatti.

Come usare RegEx con .replace in JavaScript

Per utilizzare RegEx, il primo argomento di replace verrà sostituito con la sintassi regex, ad esempio /regex/. Questa sintassi funge da modello in cui tutte le parti della stringa che hanno corrispondenza, verranno sostituite con la nuova sottostringa.

Ecco un esempio:

// corrisponde a un numero, alcuni caratteri e un altro numero
const reg = /\d.*\d/
const str = "Java3foobar4Script"
const newStr = str.replace(reg, "-");
console.log(newStr);
// "Java-Script"

La stringa 3foobar4 corrisponde al regex /\d.*\d/, quindi viene sostituita.

E se volessimo eseguire sostituzioni in più posti?

Regex offre già questa possibilità con il flag g (globale) e può essere utilizzato con replace. Ecco come:

const reg = /\d{3}/g
const str = "Java323Scr995ip4894545t";
const newStr = str.replace(reg, "");
console.log(newStr);
// JavaScrip5t
// 5 didn't pass the test :(

La regex corrisponde a parti della stringa che sono esattamente 3 numeri consecutivi. 323 è corrispondente, 995 è corrispondente, 489 è corrispondente e 454 è corrispondente. Ma l'ultimo 5 non corrisponde al modello.

Il risultato è che JavaScrip5t mostra come i modelli sono abbinati correttamente e e sostituiti con la nuova sottostringa (una stringa vuota).

È possibile utilizzare anche il flag i . Ciò significa che puoi sostituire i modelli senza distinzione tra maiuscole e minuscole. Ecco come si usa:

const reg1 = /\dA/
const reg2 = /\dA/i
const str = "Jav5ascript"
const newStr1 = str.replace(reg1, "--");
const newStr2 = str.replace(reg2, "--");
console.log(newStr1) // Jav5ascript
console.log(newStr2) // Jav--script

..5a.. non corrisponde alla prima sintassi perché RegEx fa distinzione tra maiuscole e minuscole per impostazione predefinita. Ma con l'uso del flag i, come si vede nella seconda sintassi, la stringa è come previsto, sostituita.

Come usare Split con le espressioni regolari

split usa anche RegEx. Ciò significa che puoi dividere una stringa non solo in sottostringhe che corrispondono a caratteri esatti, ma anche pattern.

Ecco una rapida occhiata:

const regex = /\d{2}a/;
const str = "Hello54 How 64aare you";
console.log(str.split(regex))
// ["Hello54 How ", "are you"]

La stringa viene separata (split) in corrispondenza di 64a perché quella sottostringa corrisponde all'espressione regolare specificata.

Nota che il flag globale - g- in split è irrilevante, a differenza del flag i e di altri flag. Questo perché split divide la stringa nei diversi punti in cui la regex trova corrispondenza.

Ricapitolando

RegEx permette di rimpiazzare (replace) le stringhe in JavaScript in maniera più efficace, potente e divertente.

Non sei limitato solo a caratteri esatti, ma puoi usare pattern e sostituzioni multiple fatte in contemporanea. In questo articolo, abbiamo visto come funzionano insieme usando alcuni esempi.

Evviva RegEx :-)