Markeringen en eigenschappen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

De volgende tabel toont de vijf markeringen die u kunt instellen voor reguliere expressies. Elke markering kan worden benaderd als eigenschap van het reguliere-expressieobject.

Markering

Eigenschap

Beschrijving

g

global

Komt meer dan een keer overeen.

i

ignoreCase

Niet-hoofdlettergevoelige overeenkomsten. Heeft betrekking op de tekens A - Z en a - z , maar niet op uitgebreide tekens zoals É en é .

m

meerdere regels

Wanneer deze markering is ingesteld, kunnen $ en ^ overeenkomen met respectievelijk het begin en einde van een regel.

s

dotall

Wanneer deze markering is ingesteld, . kan (dot) overeenkomen met het teken voor de nieuwe regel ( \n ).

x

uitgebreid

Hiermee worden uitgebreide reguliere expressies toegestaan. U kunt spaties in de reguliere expressie typen, die genegeerd worden als deel van het patroon. Hiermee kunt u reguliere-expressiecode leesbaarder typen.

Deze eigenschappen zijn alleen-lezen. U kunt de markeringen ( g , i , m , s , x ) als volgt instellen wanneer u een reguliere-expressievariabele instelt:

var re:RegExp = /abc/gimsx;

U kunt de benoemde eigenschappen echter niet rechtstreeks instellen. De volgende code resulteert bijvoorbeeld in een fout:

var re:RegExp = /abc/; 
re.global = true; // This generates an error.

De markeringen worden standaard niet ingesteld, behalve als u deze in de reguliere-expressiedeclaratie aangeeft, en de overeenkomstige eigenschappen worden eveneens op false ingesteld.

Een reguliere expressie kan nog twee andere eigenschappen bevatten:

  • De eigenschap lastIndex geeft de indexpositie in de tekenreeks aan die moet worden gebruikt voor de volgende aanroep van de methode exec() of test() van een reguliere expressie.

  • De eigenschap source geeft de tekenreeks aan die het patroongedeelte van de reguliere expressie definieert.

De markering g (global)

Wanneer de markering g ( global ) niet is opgenomen, komt een reguliere expressie niet meer dan een keer overeen. Wanneer de markering g bijvoorbeeld niet is opgenomen in de reguliere expressie, retourneert de methode String.match() slechts een overeenkomende subtekenreeks:

var str:String = "she sells seashells by the seashore."; 
var pattern:RegExp = /sh\w*/; 
trace(str.match(pattern)) // output: she

Wanneer de markering g is ingesteld, retourneert de methode String.match() meerdere overeenkomsten, als volgt:

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

De markering i (ignoreCase)

Standaard zijn reguliere-expressieovereenkomsten hoofdlettergevoelig. Wanneer u de markering i ( ignoreCase ) instelt, wordt de hoofdlettergevoeligheid genegeerd. De kleine letter s in de reguliere expressie komt bijvoorbeeld niet overeen met de hoofdletter S , het eerste teken in de tekenreeks:

var str:String = "She sells seashells by the seashore."; 
trace(str.search(/sh/)); // output: 13 -- Not the first character

Wanneer echter de markering i is ingesteld, komt de reguliere expressie niet overeen met de hoofdletter S :

var str:String = "She sells seashells by the seashore."; 
trace(str.search(/sh/i)); // output: 0

De markering i negeert hoofdlettergevoeligheid alleen voor de tekens A Z en a z , maar niet voor uitgebreide tekens, zoals É en é .

De markering m (multiline)

Als de markering m ( meerdere regels ) niet is ingesteld, komt ^ overeen met het begin van de tekenreeks en $ met het einde van de tekenreeks. Als de markering m is ingesteld, komen deze tekens overeen met het begin van een regel en het einde van een regel. Bekijk de volgende tekenreeks, die het teken voor een nieuwe regel bevat:

var str:String = "Test\n"; 
str += "Multiline"; 
trace(str.match(/^\w*/g)); // Match a word at the beginning of the string.

Ook al is de markering g ( global ) in de reguliere expressie ingesteld, komt de methode match() met slechts een subtekenreeks overeen, omdat er slechts een overeenkomst voor ^ is, namelijk het begin van de tekenreeks. De uitvoer is:

Test

Hier is dezelfde code als de markering m is ingesteld:

var str:String = "Test\n"; 
str += "Multiline"; 
trace(str.match(/^\w*/gm)); // Match a word at the beginning of lines. 

Nu bevat de uitvoer de woorden aan het begin van beide regels:

Test,Multiline

Het teken \n geeft het einde van een regel aan. De volgende tekens doen dit niet:

  • Return-teken ( \r )

  • Unicode-teken voor regelscheiding ( \u2028 )

  • Unicode-teken voor alineascheiding ( \u2029 )

De markering s (dotall)

Als de markering s ( dotall of ‘dot all’) niet is ingesteld, komt een punt ( . ) in een reguliere-expressiepatroon niet overeen met het teken voor een nieuwe regel ( \n ). In het volgende voorbeeld is er daarom geen overeenkomst:

var str:String = "<p>Test\n"; 
str += "Multiline</p>"; 
var re:RegExp = /<p>.*?<\/p>/; 
trace(str.match(re)); 

Als de markering s echter is ingesteld, komt de punt overeen met het teken voor de nieuwe regel:

var str:String = "<p>Test\n"; 
str += "Multiline</p>"; 
var re:RegExp = /<p>.*?<\/p>/s; 
trace(str.match(re)); 

In dit geval is de overeenkomst de volledige subtekenreeks binnen de tags <p> , waaronder het teken voor de nieuwe regel:

<p>Test 
Multiline</p>

De markering x (uitgebreid)

Reguliere expressies zijn soms moeilijk leesbaar, met name als ze veel speciale symbolen en metareeksen bevatten. Bijvoorbeeld:

/<p(>|(\s*[^>]*>)).*?<\/p>/gi

Wanneer u de markering x ( extended ) in een reguliere expressie gebruikt, worden lege spaties die u binnen het patroon typt, genegeerd. De volgende reguliere expressie is bijvoorbeeld identiek aan het vorige voorbeeld:

/     <p    (>  | (\s* [^>]* >))    .*?    <\/p>  /gix

Als u de markering x hebt ingesteld en u wilt dat een leeg spatieteken overeenkomt, plaatst u voor dit lege spatieteken een backslash. De volgende twee reguliere expressies zijn bijvoorbeeld gelijkwaardig:

/foo bar/ 
/foo \ bar/x

De eigenschap lastIndex

De eigenschap lastIndex geeft de indexpositie aan in de tekenreeks waar de volgende zoekopdracht moet beginnen. Deze eigenschap heeft invloed op de methoden exec() en test() die worden aangeroepen in een reguliere expressie waarbij de markering g is ingesteld op true . Neem bijvoorbeeld de volgende code:

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); 
}

De eigenschap lastIndex is standaard ingesteld op 0 (om zoekacties te starten aan het begin van de tekenreeks). Na elke overeenkomst wordt deze ingesteld op de indexpositie volgend op de overeenkomst. Daarom is de uitvoer van de voorgaande code als volgt:

0 
5 
11 
18 
25 
36 
44

Als de markering global is ingesteld op false , gebruiken de methoden exec() en test() niet de eigenschap lastIndex of stellen deze de index niet in.

De methoden match() , replace() en search() van de klasse String starten alle zoekacties vanaf het begin van de tekenreeks, ongeacht de instelling van de eigenschap lastIndex van de reguliere expressie die gebruikt is in de aanroep van de methode. (De methode match() stelt lastIndex echter in op 0.)

U kunt de eigenschap lastIndex zo instellen dat de startpositie in de tekenreeks voor overeenkomsten van de reguliere expressie wordt aangepast.

De eigenschap source (bron)

De eigenschap source geeft de tekenreeks aan die het patroongedeelte van de reguliere expressie definieert. Bijvoorbeeld:

var pattern:RegExp = /foo/gi; 
trace(pattern.source); // foo