W poniższej tabeli wymienionych zostało pięć flag, które można ustawić dla wyrażeń regularnych. Do każdej flagi dostęp można uzyskać jak do właściwości obiektu wyrażenia regularnego.
Flaga
|
Właściwość
|
Opis
|
g
|
global
|
Dopasowuje więcej niż jeden podciąg.
|
i
|
ignoreCase
|
Dopasowywanie bez rozróżnienia wielkich i małych liter. Znajduje zastosowanie dla znaków A—Z oraz a—z, ale nie dla znaków z zestawu rozszerzonego np. É i é .
|
m
|
multiline
|
Z tą flagą $ i ^ mogą dopasować odpowiednio początek i koniec wiersza.
|
s
|
dotall
|
Z tą flagą . (kropka) może dopasować znak nowego wiersza (\n).
|
x
|
extended
|
Umożliwia rozszerzone wyrażenia regularne. Programista może wpisać spacje w wyrażeniu regularnym, jednak nie staną się one częścią wzorca. Umożliwia to pisanie kodu wyrażeń regularnych w sposób bardziej czytelny.
|
Należy zauważyć, że właściwości te są tylko do odczytu. Flagi (g, i, m, s, x) można ustawić podczas ustawiania zmiennej wyrażenia regularnego, co ilustruje poniższy przykład:
var re:RegExp = /abc/gimsx;
Nie można jednak bezpośrednio ustawić właściwości nazwanych. Na przykład: poniższy kod zakończy się błędem:
var re:RegExp = /abc/;
re.global = true; // This generates an error.
Domyślnie flagi nie są ustawione, dopóki nie zostaną określone w deklaracji wyrażenia regularnego, a odpowiadające im właściwości również mają wartość false.
Ponadto istnieją dwie inne właściwości wyrażenia regularnego:
Właściwość lastIndex określa położenie indeksu w ciągu znaków do użycia w kolejnym wywołaniu metody exec() lub test() wyrażenia regularnego.
Właściwość source określa ciąg znaków, który definiuje fragment wzorca wyrażenia regularnego.
Flaga g (global)
Jeśli flaga g (global) nie została ujęta w wyrażeniu regularnym, dopasowany zostanie nie więcej jak jeden zgodny fragment. Na przykład: jeśli flaga g nie została ujęta w wyrażeniu regularnym, metoda String.match() zwróci tylko jeden dopasowany podciąg:
var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/;
trace(str.match(pattern)) // output: she
Jeśli flaga g została ustawiona, metoda Sting.match() zwróci wiele dopasowań, co ilustruje poniższy przykład:
var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/g;
// The same pattern, but this time the g flag IS set.
trace(str.match(pattern)); // output: she,shells,shore
Flaga i (ignoreCase)
Domyślnie w dopasowaniach wyrażeń regularnych wielkość liter jest uwzględniana. Po ustawieniu flagi i (ignoreCase) wielkość liter jest ignorowana. Na przykład: mała litera s w wyrażeniu regularnym nie zostanie dopasowana do wielkiej litery S, pierwszego znaku ciągu:
var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/)); // output: 13 -- Not the first character
Jednak z ustawioną flagą i wyrażenie regularne dopasuje wielką literę S:
var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/i)); // output: 0
Flaga i ignoruje wielkość liter tylko dla znaków A–Z i a–z, ale nie dla znaków z rozszerzonego zestawu np. É i é .
Flaga m (multiline)
Jeśli flaga m (multiline) nie jest ustawiona, ^ dopasuje początek ciągu znaków, a $ dopasuje koniec ciągu. Jeśli flaga m jest ustawiona, znaki te dopasują odpowiednio początek wiersza oraz jego koniec. Rozważmy następujący ciąg, który zawiera znak nowego wiersza:
var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/g)); // Match a word at the beginning of the string.
Nawet jeśli flaga g (global) jest ustawiona w wyrażeniu regularnym, metoda match() dopasuje tylko jeden podciąg, ponieważ istnieje tylko jedno dopasowanie dla ^ — początek ciągu znaków. Na wyjściu wyświetlone zostanie:
Test
Ten sam kod z ustawioną flagą m:
var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/gm)); // Match a word at the beginning of lines.
Tym razem na wyjściu wyświetlone zostaną słowa z początku obu wierszy:
Test,Multiline
Należy zauważyć, że tylko znak \n sygnalizuje koniec wiersza. Poniższe znaki go nie wskazują:
Znak powrotu karetki (\r)
Znak separatora wiersza w standardzie Unicode (\u2028)
Znak separatora akapitu w standardzie Unicode (\u2029)
Flaga s (dotall)
Jeśli flaga s (dotall lub “dot all”) nie jest ustawiona, kropka (.) we wzorcu wyrażenia regularnego nie dopasuje znaku nowego wiersza (\n). Dlatego dla poniższego przykładu brak dopasowania:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*?<\/p>/;
trace(str.match(re));
Jednak, jeśli ustawiona została flaga s, kropka dopasuje znak nowego wiersza:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*?<\/p>/s;
trace(str.match(re));
W tym przypadku dopasowaniem jest cały podciąg miedzy znacznikami <p>, łącznie ze znakiem nowego wiersza:
<p>Test
Multiline</p>
Flaga x (extended)
Wyrażenia regularne mogą być trudne do odczytania, szczególnie jeśli zawierają wiele metasymboli i metasekwencji. Na przykład:
/<p(>|(\s*[^>]*>)).*?<\/p>/gi
Jeśli programista używa w wyrażeniu regularnym flagi x (extended), wszystkie spacje wpisane we wzorcu zostaną zignorowane. Na przykład: poniższe wyrażenie regularne jest identyczne z poprzednim przykładem:
/ <p (> | (\s* [^>]* >)) .*? <\/p> /gix
Jeśli flaga x jest ustawiona i znak pustej spacji ma zostać dopasowany, należy poprzedzić puste miejsce odwróconym ukośnikiem. Na przykład dwa poniższe wyrażenia regularne są równoważne:
/foo bar/
/foo \ bar/x
Właściwość lastIndex
Właściwość lastIndex określa położenie indeksu w ciągu znaków, od którego rozpoczęte zostanie kolejne wyszukiwanie. Właściwość ta dotyczy metod exec() i test() wywoływanych dla wyrażeń regularnych, które mają flagę g ustawioną na wartość true. Weźmy na przykład pod uwagę następujący kod:
var pattern:RegExp = /p\w*/gi;
var str:String = "Pedro Piper picked a peck of pickled peppers.";
trace(pattern.lastIndex);
var result:Object = pattern.exec(str);
while (result != null)
{
trace(pattern.lastIndex);
result = pattern.exec(str);
}
Właściwość lastIndex domyślnie ustawiona jest na 0 (w celu rozpoczęcia wyszukiwania od początku ciągu znaków). Po każdym dopasowaniu ustawiana jest w położeniu indeksu dla następnego dopasowania. Dlatego na wyjściu poprzedzającego kodu wyświetlone zostanie:
0
5
11
18
25
36
44
Jeśli flaga global jest ustawiona na wartość false, metody exec() i test() nie użyją, ani nie ustawią właściwości lastIndex.
Metody match(), replace() i search() klasy String rozpoczynają każde wyszukiwanie od początku ciągu znaków bez względu na ustawienie właściwości lastIndex wyrażenia regularnego użytego w wywołaniu metody. (Jednak metoda match() ustawia właściwość lastIndex na 0).
Aby określić położenie początkowe w ciągu znaków dla wyszukiwania zgodności wyrażenia regularnego, należy ustawić właściwość lastIndex.
Właściwość source
Właściwość source określa ciąg znaków, który definiuje fragment wzorca wyrażenia regularnego. Na przykład:
var pattern:RegExp = /foo/gi;
trace(pattern.source); // foo