giovedì 29 luglio 2010

JavaScript: espressioni regolari

L'espressioni regolari agevolano la ricerca e la verifica di stringhe di testo all'interno di campi dati e documenti. Essendo il controllo dei dati uno dei primi obiettivi affidati a JavaScript il linguaggio non può allora ignorare la comodità ricevuta dall'uso delle espressioni regolari che sono, quindi, supportate dal linguaggio di scripting, nativamente! Un'espressione regolare descrive una famiglia di stringhe ed è usata come criterio di ricerca delle stesse all'interno del documento o campo. La descrizione della stringa da cercare (a volta detta pattern) avviene attraverso l'uso dei costrutti messi a disposizione dal linguaggio. In una precedente pagina ho già fatto uso delle espressioni regolari, gli utenti più curiosi avranno di sicuro notato la particolarità di quel codice. Ecco un elenco dei tag utili alla descrizione delle espressioni regolari:
  • .: indica la presenza di qualsiasi carattere. Ad esempio, l'espressione "luc." individua le stringhe: luca, lucb, lucc, etc...;
  • *: indica la presenza di 0 a N occorrenze del carattere (o gruppo di caratteri) seguito dal simbolo. Ad esempio, l'espressione "luc*a" individua le stringhe: luc, luca, lucaa, lucaaa etc...;
  • +: indica la presenza di 1 a N occorrenze del carattere (o gruppo di caratteri) seguito dal simbolo. Ad esempio, l'espressione "luc*a" individua le stringhe: luca, lucaa, lucaaa etc...;
  • ?: indica la presenza di 0 o 1 occorrenze del carattere (o gruppo di caratteri) seguito dal simbolo. Ad esempio, l'espressione "luc?a" individua le stringhe: luc o luca;
  • {n}: indica la presenza di n occorrenze del carattere seguito dal simbolo. Ad esempio, l'espressione "luca{3}" individua la stringa lucaaa;
  • {n,m}: indica la presenza di almeno n occorrenze e al massimo m del carattere seguito dal simbolo. Ad esempio, l'espressione "luca{3,5}" individua le stringhe lucaaaa, lucaaaa e lucaaaaa;
  • $: la stringa da trovare deve trovarsi a fine riga;
  • ^: la stringa da trovare deve trovarsi a inizio riga;
  • []: individua qualsiasi singolo carattere fra quelli indicati. Ad esempio l'espressione "luc[ao]" individua le stringhe luca e luco;
  • [^]: individua qualsiasi singolo carattere ad esclusione di quello indicato. Ad esempio, l'espressione "luc[^o]" individua tutte le possibili stringhe ad eccezione della stringa luco;
  • [c1-c2]: indica un intervallo di caratteri. Ad esempio, l'espressione "luc[a-b]" individua le stringhe luca, lucb e lucc;
  • [^c1-c2]: indica qualsiasi carattere ad esclusione di quelli indicati nell'intervallo. Ad esempio, l'espressione "luc[^a-c]" individua tutte le possibili stringhe ad eccezione delle stringhe luca, lucb e lucc;
  • (): permette di raggruppare più caratteri. Ad esempio, l'espressone "(lu)+ca" individua le stringhe luca, luluca, lululuca etc...;
  • |: permette la descrizione di opzioni fra carattere e/o gruppi di caratteri. Ad esempio, l'espressione "luc(a|o)" individua le stringhe luca e luco;
  • \: permette l'uso dei caratteri usati dalle espressioni regolari (sequenze di escape). Ad esempio, l'espressione "\*luca\*" individua la stringa *luca*;
La descrizione di un pattern avviene attraverso la sintassi:

var pattern=/espressione_regolare/

L'espressione regolare (fissa) è cioè racchiusa dai caratteri /. I metodi per le stringhe: search(), match(), replace() e split(), combinati all'uso delle espressioni regolari (il parametro dei metodi appena elencati) permettono la ricerca dell'espressione all'interno della stringa. Il metodo search(espressione) verifica la presenza dell'espressione all'interno della stringa e ritorna l'indice che all'interno della stessa individua l'inizio del pattern trovato! Stavate forse pensando a cicli for per scorrere i caratteri dell'array?
Il metodo match(espressione) ritorna invece un array con le stringhe trovate. Tutte ovviamente rispettano il formato descritto nell'espressione. Il metodo replace(espressione,testo) sostituisce tutte le occorrenze trovate dell'espressione con la stringa testo. Il metodo split(espressione) ritorna un array di stringhe ottenuto spezzando l'array in base all'espressione fornita.
L'espressione regolare può anche essere dichiarata facendo uso dell'oggetto RegExp. Il vantaggio di usare tale oggetto risiede nella possibilità di poter istanziare, dinamicamente, nuove espressioni regolari. La precedente sintassi che è stata presentata, infatti, dichiara un'espressione regolare che è costante!
L'uso dell'oggetto RegExp permette tra l'altro l'uso di altri due metodi: il metodo test(stringa) ritorna true se la stringa soddisfa la sintassi descritta dal pattern, altrimenti torna false; il metodo exec(stringa) cerca, così come fa già test(), e ritorna un array delle sotto stringhe trovate, torna null se non trova niente. Qui trovate una pagine di esempio, date uno sguardo al codice per vedere l'uso delle espressioni regolari.

Nessun commento:

Posta un commento