I quantificatori consentono di specificare ripetizioni di caratteri singoli o di sequenze di caratteri all'interno dei modelli, come illustrato di seguito:
Metacarattere quantificatore
|
Descrizione
|
*
(asterisco)
|
Corrisponde a una ripetizione di zero o più volte del carattere precedente.
|
+
(più)
|
Corrisponde a una ripetizione di una o più volte del carattere precedente.
|
?
(punto interrogativo)
|
Corrisponde a una ripetizione di zero o una volta del carattere precedente.
|
{
n
}
{
n
,}
e
{
n
,
n
}
|
Specifica una quantità numerica o un intervallo di numeri per l'elemento precedente:
/A{27}/
corrisponde al carattere A ripetuto 27 volte.
/A{3,}/
corrisponde al carattere A ripetuto 3 o più volte.
/A{3,5}/
corrisponde al carattere A ripetuto da 3 a 5 volte.
|
Un quantificatore può essere applicato a un unico carattere, a una classe di caratteri o a un gruppo:
-
/a+/
corrisponde al carattere
a
ripetuto una o più volte.
-
/\d+/
corrisponde a una o più cifre.
-
/[abc]+/
corrisponde alla ripetizione di uno o più caratteri
a
,
b
o
c
.
-
/(very, )*/
corrisponde alla parola
very
seguita da una virgola e da uno spazio ripetuto zero o più volte.
I quantificatori possono usati anche all'interno di gruppi parentetici a cui sono applicati dei quantificatori. Nell'esempio seguente, il quantificatore corrisponde a stringhe del tipo
word
e
word-word-word
:
/\w+(-\w+)*/
Per impostazione predefinita, le espressioni regolari agiscono in modo
greedy,
vale a dire che ogni porzione di modello dell'espressione regolare (come
.*
) cerca una corrispondenza con quanti più caratteri possibili nella stringa prima di lasciare il posto alla porzione successiva dell'espressione. Considerate, ad esempio, l'espressione regolare e la stringa seguenti:
var pattern:RegExp = /<p>.*<\/p>/;
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";
L'espressione regolare corrisponde all'intera stringa:
<p>Paragraph 1</p> <p>Paragraph 2</p>
Supponiamo, tuttavia, che si desideri individuare una corrispondenza solo per un gruppo
<p>...</p>
. Per ottenere questo risultato, procedete come segue:
<p>Paragraph 1</p>
Aggiungete un punto di domanda (
?
) dopo i quantificatori che desiderate trasformare in quantificatori
lazy
. L'espressione regolare dell'esempio seguente, che usa il quantificatore lazy
*?
, cerca una corrispondenza con
<p>
seguito dal minimo numero di caratteri possibili, seguito da
</p>
:
/<p>.*?<\/p>/
Tenete presenti gli aspetti seguenti dei quantificatori:
-
i quantificatori
{0}
e
{0,0}
non escludono un elemento da una corrispondenza;
-
non combinate insieme più quantificatori, come
/abc+*/
;
-
il punto (.) non considera più righe, a meno che non sia presente il flag
s
(
dotall
), anche se seguito dal quantificatore
*
. Consideriamo l'esempio del codice seguente:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*<\/p>/;
trace(str.match(re)); // null;
re = /<p>.*<\/p>/s;
trace(str.match(re));
// output: <p>Test
// Multiline</p>
Per ulteriori informazioni, vedete
Flag e proprietà
.