Flagi i właściwości

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

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