Le 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:

1 ^[a-z]+@[a-z]+(\.it)$

rientra ma non

1 \d+-\d+

rientra 089-4450145 oppure 08A9-4450145 ma non 089A-4450145

1 ^[^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:

1 var myRegExp = new RegExp("^(a+)");
2 var myRegExp2 = new RegExp("^(a+)", "g");
3 var myRegExp3 = /^(a+)/g
4 
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’:

1 var myRegExp = /^[^aeiou]/ ;    // istanziamo un nuovo oggetto
2 // altro codice dove utilizziamo l'oggetto
3 myRegExp.compile( /\d+-\d+/ );  // qui modifichiamo la regular expression 
4 

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.

 1 var stringa1 = "Hello world!";
 2 var stringa2 = "Albicocca";
 3 
 4 var pattern = /^[^aeiou]/;
 5 
 6 var risultato = pattern.exec(stringa1);
 7 document.write("Valore di ritorno: " + risultato);
 8 
 9 var risultato = pattern.exec(stringa2);
10 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.

1 if( /\d+-\d+/.test( "01-05" )  ) {
2     // codice che verrà eseguito
3 }
4 
5 else {
6     // codice mai raggiunto
7 }

Informazioni

Puoi utilizzare una versione personalizzata di Textile nei post, nelle pagine del wiki e negli articoli.

Inoltre sono state aggiunte delle personalizzazioni per facilitare la scrittura, ulteriori informazioni sono raggiungibili qui.