Flaggor och egenskaper

Flash Player 9 och senare, Adobe AIR 1.0 och senare

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 AZ och az, 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 AZ och az, 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:

  • Returtecknet (\r)

  • Unicode-tecknet för radavskiljare (\u2028)

  • Unicode-tecknet för stryckeavskiljare (\u2029)

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