Kwantyfikatory

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Kwantyfikatory służą do określania powtórzeń znaków lub sekwencji we wzorcach, w następujący sposób:

Metaznak kwantyfikatora

Opis

* (gwiazda)

Dopasowuje poprzedni element powtórzony zero lub więcej razy.

+ (plus)

Dopasowuje poprzedni element powtórzony co najmniej raz.

? (znak zapytania)

Dopasowuje poprzedni element powtórzony zero lub raz.

{n}

{n,}

i

{n,n}

Określa kwantyfikator numeryczny lub zakres kwantyfikatora dla poprzedniego elementu:

/A{27}/ dopasowuje znak A powtórzony 27 razy.

/A{3,}/ dopasowuje znak A powtórzony co najmniej 3 razy.

/A{3,5}/ dopasowuje znak A powtórzony od 3 do 5 razy.

Kwantyfikator można zastosować do pojedynczego znaku, do klasy znaku lub do grupy:

  • /a+/ dopasowuje znak a powtórzony co najmniej raz.

  • /\d+/ dopasowuje co najmniej jedną cyfrę.

  • /[abc]+/ dopasowuje powtórzenie co najmniej jednego znaku, każdego z następujących: a, b lub c.

  • /(very, )*/ dopasowuje słowo very po którym następuje przecinek i spacja powtórzone zero lub więcej razy.

Kwantyfikatorów można używać wewnątrz grup, utworzonych za pomocą nawiasów okrągłych, do których zastosowano kwantyfikatory. Na przykład: poniższy kwantyfikator dopasowuje ciągi znaków takich, jak word i word-word-word:

/\w+(-\w+)*/

Domyślnie wyrażenia regularne realizują tzw. zachłanne dopasowanie. Każdy podciąg we wzorcu wyrażenia regularnego (np. .*) jest dopasowywany do największej możliwej liczby znaków w ciągu; dopiero potem następuje przejście do kolejnej części wyrażenia. Weźmy na przykład pod uwagę następujące wyrażenie regularne i ciąg znaków:

var pattern:RegExp = /<p>.*<\/p>/; 
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";

Wyrażenie regularne dopasowuje cały ciąg znaków:

<p>Paragraph 1</p> <p>Paragraph 2</p>

Przypuśćmy jednak, że dopasowana ma zostać tylko jedna grupa <p>...</p>. Możliwe jest to za pomocą poniższego kodu:

<p>Paragraph 1</p>

Dodanie znaku zapytania (?) po kwantyfikatorze powoduje przekształcenie go w tzw. kwantyfikator leniwy. Na przykład: poniższe wyrażenie regularne, które zawiera kwantyfikator leniwy *? , dopasowuje <p>, po którym następuje minimalna liczba możliwych znaków, a następnie </p>:

/<p>.*?<\/p>/

Należy wziąć pod uwagę następujące kwestie dotyczące kwantyfikatorów:

  • Kwantyfikatory {0} i {0,0} nie wyłączają elementu z dopasowania.

  • Nie należy łączyć kwantyfikatorów (np. /abc+*/).

  • Kropka nie obejmuje wierszy, dopóki nie zostanie ustawiona flaga s (dotall) nawet, jeśli występuje po niej kwantyfikator *. Weźmy na przykład pod uwagę następujący kod:

    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>

Więcej informacji zawiera sekcja Flagi i właściwości.