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 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:

  • 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