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