I följande tabell visas fem flaggor som du kan använda i reguljära uttryck. Varje flagga kan användas som en egenskap i objekt för reguljära uttryck.
Flagga
|
Egenskap
|
Beskrivning
|
g
|
global
|
Matchar mer än en matchning.
|
i
|
ignoreCase
|
Versalkänslig matchning Gäller för tecknen A – Z och a – z, men inte för utökade tecken som É och é.
|
m
|
flerrads
|
När flaggan är angiven matchar $ och ^ början respektive slutet av en rad.
|
s
|
dotall
|
När flaggan är angiven matchar . (punkt) radmatningstecknet (\n).
|
x
|
extended
|
Gör det möjligt att använda utökade reguljära uttryck. Du kan använda blanktecken i reguljära uttryck som ej kommer att ingå som en del av mönstret. Detta gör att du kan skriva en mer lättläst kod i det reguljära uttrycket.
|
Observera att dessa egenskaper är skrivskyddade. Du kan ange flaggorna (g, i, m, s, x) när du ställer in en variabel för det reguljära uttrycket enligt följande exempel:
var re:RegExp = /abc/gimsx;
Du kan emellertid inte direkt ange de namngivna egenskaperna. Följande kod kommer exempelvis att resultera i ett fel:
var re:RegExp = /abc/;
re.global = true; // This generates an error.
Om du inte anger flaggorna i deklarationen av det reguljära uttrycket kommer de inte att anges och motsvarande egenskaper kommer då att sättas till false.
Det finns ytterligare två egenskaper i ett reguljärt uttryck:
Med egenskapen lastIndex anger du indexpositionen i strängen så att den kan användas vid nästa anrop av metoderna exec() eller test() i ett reguljärt uttryck.
Med egenskapen source anger du strängen som definierar mönsterdelen av det reguljära uttrycket.
g-flaggan (global)
När du inte använder g-flaggan (global) kommer det reguljära uttrycket endast att utföra en matchning. När g-flaggan inte ingår i det reguljära uttrycket kommer metoden String.match() endast att returnera en matchande delsträng, vilket visas i nästa exempel:
var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/;
trace(str.match(pattern)) // output: she
När g-flaggan är angiven kommer metoden Sting.match(), som framgår av nästa exempel, att returnera flera matchningar:
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
i-flaggan (ignoreCase)
Enligt standarden är matchningar i reguljära uttryck versalkänsliga. När du väljer att använda i-flaggan (ignoreCase) kommer versalkänsligheten att ignoreras. I nästa exempel kommer gemenen s i det reguljära uttrycket inte att matcha versalen S (det första tecknet i strängen):
var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/)); // output: 13 -- Not the first character
När du emellertid väljer att använda i-flaggan kommer det reguljära uttrycket att matcha versalen S:
var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/i)); // output: 0
Flaggan i ignorerar versalkänsligheten bara för tecknen A–Z och a–z, men inte för utökade tecken som É och é.
m-flaggan (multiline)
Om du väljer att inte ställa in m-flaggan (multiline), kommer ^ att matcha början av strängen och $ slutet av strängen. Om m-flaggan är angiven matchar dessa tecken början respektive slutet av en rad. Titta på följande exempel där det finns ett radmatningstecken:
var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/g)); // Match a word at the beginning of the string.
Trots att g-flaggan (global) är angiven i det reguljära uttrycket matchar metoden match() endast en delsträng, eftersom det bara finns en matchning för ^, strängens början. Resultatet blir:
Test
Här är samma kod, men det här gången används m-flaggan:
var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/gm)); // Match a word at the beginning of lines.
Nu visas i resultatet orden i början av de båda raderna.
Test,Multiline
Observera att det bara är tecknet \n som signalerar radslut. Följande tecken gör det inte:
s-flaggan (dotall)
Om s-flaggan (dotall) är angiven, matchar en punkt (.) i mönstret för det reguljära uttrycket inte ett radmatningstecken (\n). Detta medför att inte finns några matchningar i följande exempel:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*?<\/p>/;
trace(str.match(re));
Om däremot s-flaggan används kommer punkten att matcha ett radmatningstecken:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*?<\/p>/s;
trace(str.match(re));
I nästa exempel gäller matchningen hela delsträngen inom <p>-taggarna, inklusive radmatningstecknet:
<p>Test
Multiline</p>
x-flaggan (extended)
Reguljära uttryck kan vara svåra att läsa och detta gäller speciellt när de innehåller metasymboler och metasekvenser. Till exempel:
/<p(>|(\s*[^>]*>)).*?<\/p>/gi
När du använder x-flaggan (extended) i ett reguljärt uttryck kommer blanksteg som du skriver i mönstret att ignoreras. Följande reguljära uttryck är identiskt med det föregående:
/ <p (> | (\s* [^>]* >)) .*? <\/p> /gix
Om du väljer att använda x-flaggan och om du vill matcha ett blanksteg måste du före blanksteget skriva ett omvänt snedstreck. Följande två reguljära uttryck är likvärdiga:
/foo bar/
/foo \ bar/x
Egenskapen lastIndex
Egenskapen lastIndex anger indexpositionen i strängen där nästa sökning ska starta. Den här egenskapen påverkar metoderna exec() och test() vilka båda anropar ett reguljärt uttryck där g-flaggan är satt till true. Titta på följande 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);
}
Egenskapen lastIndex är enligt standard 0 (sökningen startar vid början av strängen). Efter varje matchning ändras indexpositionen enligt matchningen. Detta innebär att föregående kod kommer att resultera i följande utmatning:
0
5
11
18
25
36
44
Om global-flaggan är false, kommer egenskapen lastIndex inte att användas eller anges i metoderna exec() och test().
Metoderna match(), replace() och search() i klassen String startar alla sökningarna från början av strängen, oberoende av inställningen i egenskapen lastIndex i det reguljära uttrycket som används för att anropa metoden. (Emellertid sätter metoden match()lastIndex till 0.)
Du kan ställa in egenskapen lastIndex om du vill justera startpositionen i strängen för reguljär uttrycksmatchning.
Egenskapen source
Med egenskapen source anger du strängen som definierar mönsterdelen av det reguljära uttrycket. Till exempel:
var pattern:RegExp = /foo/gi;
trace(pattern.source); // foo