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 * . Rozważmy na przykład 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 .