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
.