ESPRESSIONI REGOLARI IN JAVASCRIPT
Conoscere le espressioni regolari è molto importante quando lavoriamo con i dati perché ci consentono di fare controlli particolari su una stringa, ad esempio per sapere se c’è una certa combinazione di caratteri, se sono presenti numeri di telefono, indirizzi e-mail e così via. Grazie ai metodi messi a disposizione da javascript possiamo estrapolare queste informazioni e metterle in un array. Un tipico utilizzo è la validazione dei campi di un form, la gestione di una password etc. Invece di operare direttamente sul codice javascript inizialmente faremo i nostri test sul sito regexr.com di cui ti lascio il link. https://regexr.com/
IL FLAG GLOBAL
Assicuriamoci che sia selezionata la voce javascript. La prima cosa che dobbiamo definire è un pattern che va indicato all’interno di due slash. Dopo il secondo slash c’è anche un carattere g (global). Per capire a cosa serve questo flag cancelliamo il pattern e proviamo a cercare tutte le occorrenze della lettera a.
IL FLAG GLOBAL
Come vediamo vengono selezionate tutte le occorrenze della lettera a. Se disattiviamo il flag global solamente la prima occorrenza trovata viene selezionata, quella che si trova in was. Quindi quando lavoriamo in modalità non global (flag g) il motore delle espressioni regolari restituisce solo la prima occorrenza trovata nel testo. Mettiamo ora una A e vediamo che non viene selezionata; tuttavia, se spuntiamo il flag i (case insensitive) vedremo che anche la A verrà selezionata.
QUANTIFICATORI PRIMA PARTE
I quantificatori come dice la parola stessa servono a indicare una quantità. Per capire facciamo subito un esempio. Cancelliamo tutto il testo e scriviamo ciao. Se come pattern scriviamo ciao, verrà trovata corrispondenza con il testo ciao.
IL QUANTIFICATORE ?
Tuttavia, se mettiamo miao non verrà trovata corrispondenza perché il pattern dice: trovami una occorrenza della m, una della i, una occorrenza della a e una della o. Se mettiamo il quantificatore ? dopo la m verrà trovata corrispondenza con iao, questo perché questo quantificatore dice al motore delle espressioni regolari trovami 0 o 1 occorrenza della lettera m. Il resto rimane invariato.
IL QUANTIFICATORE +
Abbiamo poi il quantificatore + che dice al motore delle espressioni regolari, trovami almeno una occorrenza della m seguita da una occorrenza della i da una della a e una occorrenza della o. Ovviamente in questo caso il pattern fallisce in quanto non abbiamo occorrenze della m nella stringa ciao. Se mettiamo come testo miao, viene trovata corrispondenza e il numero delle lettere m può essere una o più (il quantificatore + dice almeno una occorrenza nel testo).
IL QUANTIFICATORE *
L’altro quantificatore è il quantificatore * che vuol dire zero o più occorrenze.
SEQUENZA DI CARATTERI E METACARATTERI
Lavoriamo in modalità global e case insensitive, se vogliamo cercare una parola, ad esempio, was digitiamo come pattern quella parola. Attenzione però il motore non va a cercare la parola was ma una sequenza di caratteri costituita da w da a e da s. All’interno del pattern possiamo usare dei metacaratteri che hanno uno speciale significato nel pattern. Se mettiamo un punto . vengono selezionati tutti i caratteri ad eccezione dei caratteri di new line. Il metacarattere \w cerca tutte le lettere dalla a alla z, tutti i numero da 0 a 9 e gli underscore. Non seleziona spazi e ritorni a capo. Il metacarattere \W fa l’esatto contrario seleziona spazi, punti e ritorni a capo. Un altro metacarattere molto importante è \d che trova tutti i numeri all’interno di un testo da 0 a 9. \D fa il contrario, quindi trova corrispondenza con tutto ciò che non è un numero. Abbiamo infine il metacarattere \s se vogliamo selezionare gli spazi all’interno del testo, e \S che seleziona tutto quello che non è uno spazio, né i caratteri di new line.
QUANTIFICATORI SECONDA PARTE
Per quantificare un valore specifico si utilizzano le parentesi graffe. Ad esempio:
Il pattern è verificato solo con tre occorrenze della lettera m, la lettera i, a ed o. Oltre a specificare la quantità esatta che noi vogliamo possiamo anche specificare “a partire da” ad esempio vogliamo che ci sia corrispondenza tra una sequenza di almeno tre m e la sequenza i, a, o. Il pattern è questo:
Possiamo inoltre specificare un range, ad esempio, mettiamo {3,5}. Altri due componenti che possiamo scrivere nel pattern sono il simbolo del dollaro e l’accento circonflesso ^. Il $ trova corrispondenza se un certo carattere si trova alla fine di un testo. Ad esempio.
Se attiviamo il flag multiline anche la sequenza ga della prima riga verrà catturata. Con l’accento circonflesso andiamo a cercare all’inizio della linea o su più linee se attiviamo il flag multiline. Questa volta il simbolo deve precedere il carattere. I flag ci consento di lavorare in una certa modalità; quindi, l’attivazione o meno dipende esclusivamente da ciò che in quel momento ci serve.
RANGE DI CARATTERI E GRUPPI
Definire un pattern abc significa dire al motore cerca nel testo una sequenza con quei caratteri. Grazie all’utilizzo delle parentesi quadre o indifferentemente dal carattere pipe possiamo cercare corrispondenza con uno dei caratteri indicati.
Se ad esempio vogliamo selezionare un range di lettere minuscole dalla a alla n scriviamo: /[a-n]/g, oppure i numeri da 0 a 5 /[0-5]/g. Possiamo anche effettuare selezioni multiple, ad esempio:
Con questo pattern selezioniamo tutte le lettere da a-n compresa la t minuscola o maiuscola (flag case insensitive attivo) e tutti i numeri compresi tra 3 e 6. L’accento circonflesso denota la negazione, un po’ come il not nelle espressioni booleane. Ad esempio: /[^a-n]/g significa prendi tutte le lettere che non si trovano nel range [a-n]. Se vogliamo selezionare tutti i punti nel testo lo mettiamo tra parentesi quadre. Torniamo al range a-n. Vogliamo ora trovare tutte le occorrenze tra /[a-n]{3}/g solo se ci sono almeno tre occorrenze di lettere che si trovano nel range [a-n].
Vediamo che .com non è selezionato perché ci sono solo due lettere nel range [a-n]. Con le parentesi tonde andiamo a raggruppare una porzione di pattern. Una volta racchiuso un pattern tra parentesi tonde, ad esempio perché vogliamo che sia opzionale, poi possiamo usare un quantificatore, ad esempio *. Anche in questo caso possiamo usare il quantificatore parentesi graffe.
OGGETTO REGEXP ED ESPRESSIONI REGOLARI LETTERALI
Javascript supporta nativamente le espressioni regolari attraverso l’oggetto RegExp. Facendo il console.log(RegExp.prototype); vediamo che abbiamo una serie di proprietà e metodi per lavorare con le espressioni regolari. Il metodo exec trova la corrispondenza nel testo con il pattern definito e ritorna un array come risultato oppure null. test restituisce true o false, true in caso di match false in caso contrario.
Scrivi un commento