Oggetto `RegExp`

Questo articolo spiega l'oggetto RegExp.

Spiegheremo l'oggetto RegExp con esempi pratici.

YouTube Video

Oggetto RegExp

Cos'è RegExp?

RegExp (Espressione Regolare) è un oggetto utilizzato per rappresentare modelli di stringhe. A differenza dei semplici confronti di caratteri, puoi definire in modo flessibile 'stringhe che soddisfano determinate condizioni'.

Utilizzando un oggetto RegExp, puoi eseguire operazioni come ricercare, validare, estrarre e sostituire stringhe in modo conciso e chiaro. È molto efficace per attività quotidiane come la validazione degli input dei moduli, l'analisi dei log e la formattazione del testo. Di seguito sono riportati alcuni semplici esempi di espressioni regolari.

1const pattern = /abc/;
  • Questa espressione regolare verifica se la sequenza 'abc' è inclusa.

Come creare espressioni regolari (due metodi)

Esistono due tipi di sintassi RegExp: notazione letterale e notazione tramite costruttore.

1// Literal notation: pattern and flags are written together
2const literal         = /hello/;
3const literalWithFlag = /hello/i;
4const literalDigits   = /\d+/;
5
6// Constructor notation: pattern and flags are passed separately
7const constructor         = new RegExp("hello");
8const constructorWithFlag = new RegExp("hello", "i");
9const constructorDigits   = new RegExp("\\d+");
  • La notazione letterale è concisa e leggibile, il che la rende adatta per le espressioni regolari usate come costanti.. D'altra parte, la notazione con costruttore viene utilizzata quando si desidera costruire il pattern usando variabili o determinarne il contenuto durante l'esecuzione.
  • Con la notazione letterale, puoi descrivere intuitivamente sia l'espressione regolare che i suoi flag insieme. Al contrario, con la notazione con costruttore, è necessario specificare il pattern e i flag separatamente.
  • Inoltre, con la notazione con costruttore, passi l'espressione regolare come stringa, quindi le barre rovesciate devono essere escape due volte.

test(): La validazione più semplice

L'oggetto RegExp fornisce metodi per effettuare valutazioni e operazioni utilizzando espressioni regolari. test() è un metodo che restituisce un booleano che indica se un modello corrisponde.

1const regex = /JavaScript/;
2
3console.log(regex.test("I love JavaScript")); // true
4console.log(regex.test("I love TypeScript")); // false
  • È il primo metodo che dovresti imparare ed è ideale per ramificazioni condizionali o per la validazione degli input.

match(): Ottenere risultati corrispondenti

match() restituisce un array che contiene la stringa trovata e informazioni dettagliate.

1const text = "Version 1.2.3";
2const result = text.match(/\d+\.\d+\.\d+/);
3
4console.log(result[0]); // "1.2.3"
  • match() è più conveniente rispetto a test() per l’estrazione e l’analisi.

replace(): sostituzione usando espressioni regolari

replace() converte la parte corrispondente in un'altra stringa.

1const text = "Hello   World";
2const result = text.replace(/\s+/g, " ");
3
4console.log(result); // "Hello World"
  • Puoi usarlo per la formattazione dei log o per normalizzare gli spazi bianchi superflui.

Basi dei Flag (g, i, m)

Puoi specificare dei 'flag' nelle espressioni regolari. I flag sono opzioni che controllano come un'espressione regolare gestisce le stringhe secondo determinate regole. Anche con lo stesso modello, i risultati possono cambiare a seconda dei flag.

1const text = "apple Apple APPLE";
2const regex = /apple/gi;        // or new RegExp("apple", "gi");
3
4console.log(text.match(regex)); // ["apple", "Apple", "APPLE"]
  • Il flag g (global) effettua la ricerca su tutta la stringa.
  • Il flag i (ignore case) ignora le differenze tra maiuscole e minuscole durante la corrispondenza.
1const multilineText = `apple
2banana
3apple`;
4
5const regexM = /^apple/gm;
6
7console.log(multilineText.match(regexM)); // ["apple", "apple"]
  • Il flag m (multiline) viene utilizzato per trattare stringhe multi-linea su base per-riga. Con questo, ^ e $ funzionano in base all'inizio o alla fine di ogni riga, invece che all'intera stringa.

Classi di caratteri: combinare più alternative

Usando le parentesi quadre [], puoi definire un insieme di caratteri possibili per una singola posizione.

1const regex = /gr[ae]y/;
2
3console.log(regex.test("gray")); // true
4console.log(regex.test("grey")); // true
  • Ciò è utile per gestire variazioni ortografiche e semplici alternative.

Metacaratteri: scorciatoie comuni

I metacaratteri sono simboli che permettono di scrivere schemi comunemente usati in una forma più breve.

1const regex = /\d{4}-\d{2}-\d{2}/;  // or new RegExp("\\d{4}-\\d{2}-\\d{2}");
2
3console.log(regex.test("2025-12-29")); // true
  • \d significa una cifra numerica, e {n} specifica il numero di ripetizioni.

^ e $: validare l’intera stringa

^ e $ rappresentano l’inizio e la fine di una stringa.

1const regex = /^\d+$/;
2
3console.log(regex.test("123"));   // true
4console.log(regex.test("123a"));  // false
  • Sono importanti in situazioni in cui è richiesta una corrispondenza esatta, come nell’input di moduli.

Raggruppamento e cattura

Utilizzando le parentesi (), puoi estrarre valori parziali.

1const text = "2025/12/29";
2const regex = /(\d{4})\/(\d{2})\/(\d{2})/;
3const [, year, month, day] = text.match(regex);
4
5console.log(year, month, day); // 2025 12 29
  • Viene spesso utilizzato per suddividere date e stringhe strutturate.

Errori comuni e punti da notare

Le espressioni regolari sono potenti, ma tendono a diventare difficili da leggere.

1// Hard to read
2const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$/;
  • Se diventa troppo complesso, puoi considerare di aggiungere commenti, suddividere le espressioni o rivedere il processo stesso.

Riepilogo

RegExp è una caratteristica fondamentale in JavaScript per descrivere l’elaborazione delle stringhe in modo semplice e accurato. Non è necessario imparare subito espressioni regolari complesse; è importante usare i metodi e la sintassi di base come test, match e replace secondo le tue esigenze pratiche. Se riesci a considerare le espressioni regolari non come ‘conoscenze speciali’ ma come ‘strumenti per la rappresentazione organizzata dei modelli’, migliorerai notevolmente la qualità e la leggibilità della validazione degli input e dell’elaborazione dei testi.

Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.

YouTube Video