Quantificatori

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

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à .