L'oggetto RegExp

Argomenti trattati: ricerca e controllo di espressioni regolari nelle stringhe.

L'oggetto RegExp prende il nome da Regular Expression, e permette la ricerca di espressioni regolari all'interno di stringhe. 

L'oggetto RegExp ricerca e memorizza queste corrispondenze, che possono essere considerate dei modelli per la ricerca di precise combinazioni di caratteri, numeri o simboli. Sono disponibili 2 modalità di sintassi; la prima è la seguente:

var espressione_regolare = new RegExp("criteri di ricerca",["parametro"])

Dove new RegExp() è il costruttore di un nuovo oggetto RegExp;

La seconda sintassi è la seguente:

var espressione_regolare = /criterio/parametro

Dove il criterio è il modello, segnalato da "/", a indicare che la variabile espressione_regolare è un modello e non una stringa.

In entrambi i casi, i parametri sono g e i, dove g corrisponde rispettivamente alla globalità dell'espressione regolare considerata nel suo insieme, mentre i permette di non distinguere tra maiuscole e  minuscole.

 
Metodi 
compile() compila l'espressione regolare passata 
exec() esegue la ricerca delle corrispondenze nella stringa
test() verifica l'esistenza di una corrispondenza
Proprietà
RegExp, $1...$9 restituisce le ultime sottostringhe di criteri memorizzate, secondo l'argomento numerico (da 1 a 9)
global si usa per definire la ricerca di tutte le possibili occorrenze delle espressioni regolari  nella stringa
ignoreCase specifica se la ricerca deve essere case sensitive (con differenziazione tra maiuscole e minusole) o meno
input restituisce la stringa nella quale è stata fatta la ricerca
lastIndex restituisce la posizione del carattere in cui inizia l'ultima corrispondenza individuata in una stringa di ricerca.
lastMatch gli ultimi caratteri corrispondenti
lastParen l'ultima corrispondenza tra parentesi
leftContext la sottostringa che precede l'ultima corrispondenza
multiline permette di eseguire la ricerca su  +  righe
rightContext la sottostringa che segue l'ultima corrispondenza
source il testo che rappresenta l'espressione di ricerca

Vista la sintassi basilare, i metodi e le proprietà, possono essere analizzati alcuni semplici esempi:

 var SearchABC=/ABC/g
// oppure
  var SearchABC=New RegExp("abc","g");

ai quali possono essere applicati alcuni semplici metodi:

 SearchABC.exec("ABC");

 Poiché l'espressione ABC non corrisponde al valore dell'espressione regolare SearchABC, che corrisponde a sua volta alla sequenza di caratteri "abc", il metodo exec restituirà null.

Se però viene aggiunto il parametro "i" al costruttore dell'oggetto RegExp, in questo modo:

var SearchABC=New RegExp("abc","i")

poiché in questo caso non ci sarà differenza tra caratteri maiuscoli e minuscoli, il risultato sarà: "ABC".

         

In realtà, l'utilizzo di espressioni regolari permette ricerche di corrispondenze ben  più complesse, rispetto alle semplici tre lettere esaminate!

Visualizzando ad esempio questo codice, possiamo controllare che, data una casella di testo in cui un utente dovrebbe scrivere il suo numero di telefono, egli immetta un numero telefonico valido, cioé in cui non vi siano lettere o altri caratteri non pertinenti:
var SearchNum=/\D/;
/* il modello di espressione regolare segnalato da \D corrisponde a qualunque carattere  che non corrisponda alle cifre numeriche da 0 a 9 */
function ricerca(numero)
{
    var controllo=numero;

    // numero è il parametro, il cui valore viene passato alla variabile controllo;

    if (controllo.search(SearchNum)!= -1)

    /* se viene trovata una qualunque corrispondenza che sia un carattere che non rappresenti una cifra numerica, viene visualizzato un messaggio di errore */

    alert("il numero di telefono può contenere soltanto caratteri numerici, senza spazi o trattini.\n ricontrollate
             il valore da voi immesso") // continua da sopra solo per motivi di visualizzazione
}

 Provate ad immettere un numero di telefono valido o una qualsiasi stringa all'interno di questa casella, per verificare il funzionamento di questa funzione:

Il metodo search è utilizzato dall'oggetto String. Se non viene trovata alcuna corrispondenza, questo metodo restituisce -1, cosa che si dovrebbe verificare se nella casella di testo venisse immesso un numero di telefono valido! Se invece la funzione non restituisce -1, vuol dire che è stato immesso un carattere - anche un  trattino, o uno spazio - che non è considerato valido ai fini dell'elaborazione del dato, e viene di conseguenza visualizzato un messaggio per segnalare l'errore.

Si può notare come un risultato simile sarebbe stato ottenuto sostituendo il codice:

if (controllo.search(SearchNum)!= -1)

con il metodo dell'oggetto RegExp:

if(SearchNum.test(controllo))

 che restituisce true se viene trovata la corrispondenza, viceversa restituisce false.

I modelli di corrispondenze saranno familiari ai programmatori Perl:

Espressione del modello Cosa rappresenta
\w rappresenta l'insieme dei caratteri alfanumerici, ovvero lettere e  numeri
\W qualunque carattere non alfanumerico (ad esempio i segni di punteggiatura)
\s qualunque carattere di spazio (spazio, tabulazioni, nuove righe)
\S rappresenta qualunque carattere che non è uno spazio
\d qualunque cifra numerica
\D tutti i caratteri che non sono cifre numeriche
\b rappresenta il carattere di backspace
. Qualunque carattere, tranne new line
[con 1 o + caratteri][^ con 1 o  + caratteri] La parentesi quadre possono racchiudere un insieme di caratteri.var miavar=/[aei]/ può trovare qualunque corrispondenza di caratteri a, e o i. Utilizzando invece miavar=/[^aei]/ la corrispondenza è verificata da qualunque carattere che non sia a, non sia e o non sia i. Notare che si può anche utilizzare un trattino per sequenza di caratteri, del tipo miavar=/[a-f]/, che rappresenta l'intervallo di caratteri da a a f.
{x}; {x,}; {x,y} Le parentesi graffe segnalano quante volte un certo carattere deve essere presente.
miavar=/abc{3}d/  corrisponde alla stringa "abcccd", perché la c deve essere presente esattamente 3 volte;
miavar=/abc{3,}d/  significa che nella stringa data la c deve essere presente almeno 3 volte;
miavar=/abc{3,6}d/ significa che nella stringa data la c deve essere presente almeno 3 volte, ma non  +  di 6;
+; *; ? Il simbolo +  significa che nell'espressione data il carattere che precede  +  deve essere presente almeno una volta:
miavar=/ab+c/ può dunque corrispondere alla stringa "abc", o "abbc", o "abbbbbbc"...
miavar=/ab?c/ corrisponde alla stringa "abc", o "ac", perché il carattere che precede il punto e virgola deve essere presente nessuna vola o nessuna.
miavar=/ab*c/ può corrispondere alla stringa "abbbc", o "abbc", o "abbbbbbc"... o alla stringa "ac", perchè il carattere deve essere presente  +  di una volta o nessuna.
OR logico: | Trova o un'espressione, o un'altra:
miavar=/ae|ab/;
(), \x Le parentesi tonde permettono di inserire un modello di ricerca in un altro modello di ricerca:
miavar=/ab(n|N)cd/ permette di trovare sia la stringa "abncd" sia la stringa "abNcd". Se si vuole ricercare la stessa sottocorrispondenza successivamente un certo numero di volte, si può scrivere:
miavar=/ab(n|N)cd\1/, per trovare o ""abncdn" o "abNcdN".
Viene utilizzato per ricercare una corrispondenza o all'inizio della stringa, o all'inizio della riga.
$ Viene utilizzato per ricercare una corrispondenza o alla fine della stringa, o alla fine della riga.
\b Corrisponde a qualunque carattere non di testo dopo una certa espressione:
var miavar=/Il\b/ corrisponde alla stringa "Il " (con uno spazio, che è comunque considerato un carattere, ma non è un carattere alfanumerico), e non "Ilaria", perché la a successiva alla stringa "Il" è un carattere alfanumerico.
 \B  Corrisponde a qualunque carattere testuale dopo una certa espressione:
var miavar=/Il\B/ corrisponde alla stringa "Ilaria" (perché la a successiva alla stringa "Il" è un carattere alfanumerico), e non "Il ", perché lo spazio non è un carattere alfanumerico.

I caratteri speciali che permettono di impostare le espressioni regolari, sono talvolta utilizzati nelle stringhe. Per questo, darebbero un errore se venissero posti all'interno di una stringa e non venisse utilizzata la barra contraria \ per segnalarli nel codice.

Ad esempio, per rappresentare l'asterisco si dovrebbe utilizzare:
var miavar=/\*/;

Oppure, per rappresentare il $ si dovrebbe usare l'espressione:
var miavar=/\$/;


Torna all'inizio | Home