Espressioni Regolari in Javascript

Un espressione regolare è uno strumento utile per rappresentare un insieme di stringhe. Incominciamo subito con un esempio per far capire immediatamente di cosa stiamo parlando:

1 ^a
Questa è una regular expression! Con questo pattern stiamo rappresentando l’insieme di tutte le stringhe che iniziano con il carattere ‘a’. Ricadono quindi in questa classe:
antonio
anfora
alla luce del sole (lo spazio è un carattere)
NON ricadono in questa classe:
bullone
civile
linguaggio dinamico

Il carattere ^ è un carattere speciale (meta-carattere) e sta proprio ad indicare l’inizio di una linea di testo. Ecco l’elenco dei meta-caratteri
. – Ogni singolo carattere
^ – Inizio riga
$ – Fine riga
+ – una o più occorrenze di un carattere o espressione che lo precede
* – zero o più occorrenze di un carattere o espressione che lo precede
? – zero o una occorrenza di un carattere o espressione che lo precede
{n} – numero di occorrenze corrispondente a n occorrenze di un carattere o espressione che lo precede
{ n,m }- numero di occorrenze compreso tra n e m occorrenze di un carattere o espressione che lo precede (m può essere omesso)
() – indica una sottoespressione, serve a definire un ordine di priorità per la valutazione dei metacaratteri
[] – trova un singolo carattere contenuto nell’insieme dei caratteri contenuto al suo interno
[^] – trova un qualsiasi carattere meno quelli contenuti nell’insieme dei caratteri contenuto al suo interno
| – indica un alternativa tra due (o più ) caratteri o espressioni
\ – carattere di escape per i metacaratteri
\A – Inizio stringa
\z – Fine stringa
\w – Qualsiasi carattere che sia una lettera, underscore e numero
\W – Qualsiasi carattere che non sia una lettera, underscore e numero
\s – Qualsiasi carattere spazio
\S – Qualsiasi carattere che non è spazio
\d – Qualsiasi carattere numerico
\D – Qualsiasi carattere non numerico

Qualche esempio:
\d+-\d+
rientra 089-4450145 oppure 08A9-4450145 ma non 089A-4450145

^[^aeiou]
rientra pollo ma non aiuola

Quando all’interno delle parentesi quadre utilizziamo il trattino stiamo dichiarando una range di valori. [A-Z] indica tutte le lettere dell’alfabeto in maiuscolo le lettere da a a g in minuscolo [A-z] tutte le lettere dell’alfabeto [0-5] tutti i numeri da 0 a 5

L’oggetto RegExp
Costruzione
L’oggetto che ci offre javascript per gestire le espressioni regolari è RegExp. Per istanziare questo oggetto possiamo usare il suo costruttore:
var myRegExp = new RegExp(“^(a+)”);
var myRegExp2 = new RegExp(“^(a+)”, “g”);
var myRegExp3 = /^(a+)/g

Il primo parametro è ovviamente il pattern dell’espressione regolare, il secondo parametro opzionale è una stringa che contiene i modificatori. I modificatori sono:
g – indica che la ricerca deve essere globale, invece che terminare con la prima occorrenza
i – la ricerca è case insensitive
m – la ricerca è mutlilinea
Nel terzo caso, per costruire l’oggetto abbiamo utilizzato un litterale. Il primo slash segnala l’inizio del pattern, il secondo segnala la chiusura. Immediatamente dopo la chiusura possiamo aggiungere i modificatori.

Utilizzo dell’oggetto RegExp
Il metodo compile() ci permette di definire la regular expression a runtime, quindi possiamo utlizzare lo stesso oggetto per diverse regular expression. Accetta come primo parametro l’espressione regolare che vogliamo compilare e un secondo parametro opzionale che è un carattere tra ‘g’, ‘i’ e ‘m’:
var myRegExp = /^[^aeiou]/ ; // istanziamo un nuovo oggetto
// altro codice dove utilizziamo l’oggetto
myRegExp.compile( /\d+-\d+/ ); // qui modifichiamo la regular expression

Il metodo exec() esamina la stringa che gli viene data in input e verifica se esiste corrispondenza con l’epressione regolare. Ritorna un oggetto Match Array,un oggetto di convenienza che possiede varie proprietà riguardo al risultato, null altrimenti.
var stringa1 = “Hello world!”;
var stringa2 = “Albicocca”;
var pattern = /^[^aeiou]/;
var risultato = pattern.exec(stringa1);
document.write(“Valore di ritorno: ” + risultato);
var risultato = pattern.exec(stringa2);
document.write(“Valore di ritorno: ” + risultato);

Il metodo test() ritorna un valore booleano, true se c’è matching tra l’espressione regolare e la stringa in input, false altrimenti.
if( /\d+-\d+/.test( “01-05” ) ) {
// codice che verrà eseguito
}
else {
// codice mai raggiunto
}