Flash CS3-Dokumentation |
|||
| Programmieren mit ActionScript 3.0 > Verwenden von regulären Ausdrücken > Syntax für reguläre Ausdrücke > Flags und Eigenschaften | |||
In der folgenden Tabelle sind die fünf Flags aufgeführt, die für reguläre Ausdrücke gesetzt werden können. Jedes Flag kann als Eigenschaft des regulären Ausdrucks abgerufen werden.
|
Flag |
Eigenschaft |
Beschreibung |
|---|---|---|
|
|
|
Entspricht mehreren Übereinstimmungen. |
|
|
|
Bei der Suche nach Übereinstimmungen wird die Groß- und Kleinschreibung nicht beachtet. Wird für die Zeichen |
|
|
|
Wenn dieses Flag gesetzt ist, entsprechen |
|
|
|
Wenn dieses Flag gesetzt ist, werden mit |
|
|
|
Ermöglicht erweiterte reguläre Ausdrücke. Sie können in einem regulären Ausdruck Leerzeichen eingeben, die nicht als Bestandteil des Musters aufgefasst werden. Dadurch kann der Code für den regulären Ausdruck besser lesbar eingegeben werden. |
Beachten Sie, dass diese Eigenschaften schreibgeschützt sind. Sie können die Flags (g, i, m, s und x) wie folgt beim Definieren einer Variablen für einen regulären Ausdruck setzen:
var re:RegExp = /abc/gimsx;
Die benannten Eigenschaften können jedoch nicht direkt gesetzt werden. Der folgende Code führt beispielsweise zu einer Fehlermeldung:
var re:RegExp = /abc/; re.global = true; // Dies erzeugt eine Fehlermeldung.
In der Standardeinstellung sind die Flags nicht gesetzt, es sei denn, Sie geben sie in der Deklaration für einen regulären Ausdruck an. Die entsprechenden Eigenschaften sind ebenfalls auf false gesetzt.
Es sind darüber hinaus zwei weitere Eigenschaften für reguläre Ausdrücke verfügbar:
lastIndex-Eigenschaft wird die Indexposition im String angegeben, die für den nächsten Aufruf der Methoden exec() oder test() eines regulären Ausdrucks verwendet wird. source-Eigenschaft wird der String angegeben, der das Muster in einem regulären Ausdruck definiert.Wenn das g-Flag (global) nicht gesetzt ist, wird je regulärem Ausdruck nur eine Übereinstimmung gefunden. Wenn das g-Flag im regulären Ausdruck nicht gesetzt ist, gibt die String.match()-Methode beispielsweise nur einen übereinstimmenden Teilstring zurück:
var str:String = "she sells seashells by the seashore."; var pattern:RegExp = /sh\w*/; trace(str.match(pattern)) // Ausgabe: she
Wenn das g-Flag gesetzt ist, gibt die String.match()-Methode wie folgt mehrere Übereinstimmungen zurück:
var str:String = "she sells seashells by the seashore."; var pattern:RegExp = /sh\w*/g; // Gleiches Muster, das g-Flag ist jedoch gesetzt. trace(str.match(pattern)); // Ausgabe: she,shells,shore
In der Standardeinstellung wird bei Übereinstimmungen regulärer Ausdrücke die Groß- und Kleinschreibung beachtet. Wenn Sie das i-Flag (ignoreCase) setzen, wird die Groß- und Kleinschreibung ignoriert. Das kleingeschriebene s im regulären Ausdruck entspricht beispielsweise nicht dem ersten Zeichen des Strings, dem großgeschriebenen Buchstaben S:
var str:String = "She sells seashells by the seashore."; trace(str.search(/sh/)); // Ausgabe: 13 - nicht das erste Zeichen
Wenn das i-Flag jedoch gesetzt ist, stimmt der Großbuchstabe S mit dem regulären Ausdruck überein:
var str:String = "She sells seashells by the seashore."; trace(str.search(/sh/i)); // Ausgabe: 0
Mit dem i-Flag wird die Groß- und Kleinschreibung nur bei den Zeichen A-Z und a-z, jedoch nicht bei Sonderzeichen wie Ä und ä ignoriert.
Wenn das m-Flag (multiline) nicht gesetzt ist, entspricht ^ dem Anfang eines Strings und $ dem Ende eines Strings. Wenn das m-Flag gesetzt ist, entsprechen diese Zeichen jeweils dem Anfang bzw. dem Ende einer Zeile im String. Betrachten Sie den folgenden String, der ein Zeilenvorschubzeichen enthält:
var str:String = "Test\n"; str += "Multiline"; trace(str.match(/^\w*/g)); // Stimmt mit einem Wort am Anfang des Strings überein.
Obwohl das g-Flag (global) im regulären Ausdruck gesetzt ist, gibt die match()-Methode nur einen übereinstimmenden Teilstring zurück, da nur eine Entsprechung für das ^-Zeichen vorliegt, nämlich am Anfang des Strings. Folgendes wird ausgegeben:
Test
Es folgt der gleiche Code mit dem gesetzten m-Flag:
var str:String = "Test\n"; str += "Multiline"; trace(str.match(/^\w*/gm)); // Stimmt mit einem Wort am Anfang von Zeilen überein.
Nun werden die Wörter am Anfang der beiden Zeilen ausgegeben:
Test,Multiline
Beachten Sie, dass nur das Zeichen \n das Ende einer Zeile angibt. Das Ende einer Zeile wird jedoch nicht durch folgende Zeichen angegeben:
\r)\u2028)\u2029)Wenn das s-Flag (dotall) nicht gesetzt ist, entspricht ein Punkt (.) in einem regulären Ausdruck nicht dem Zeilenvorschubzeichen (\n). Daher wird im folgenden Beispiel keine Entsprechung zurückgegeben:
var str:String = "<p>Test\n"; str += "Multiline</p>"; var re:RegExp = /<p>.*?<\/p>/; trace(str.match(re));
Wenn das s-Flag jedoch gesetzt ist, wird mit dem Punkt auch eine Übereinstimmung mit dem Zeilenvorschubzeichen erkannt:
var str:String = "<p>Test\n"; str += "Multiline</p>"; var re:RegExp = /<p>.*?<\/p>/s; trace(str.match(re));
In diesem Fall stimmt der gesamte Teilstring innerhalb der <p>-Tags mit dem regulären Ausdruck überein, einschließlich des Zeilenvorschubzeichens:
<p>Test Multiline</p>
Reguläre Ausdrücke sind unter Umständen schwer lesbar, vor allem, wenn Sie viele Metasymbole und Metasequenzen enthalten. Beispiel:
/<p(>|(\s*[^>]*>)).*?<\/p>/gi
Wenn Sie das x-Flag (extended) in einem regulären Ausdruck verwenden, werden alle im Muster eingefügten Leerzeichen ignoriert. Der folgende reguläre Ausdruck ist beispielsweise mit dem vorherigen Beispiel identisch:
/ <p (> | (\s* [^>]* >)) .*? <\/p> /gix
Wenn das x-Flag gesetzt ist und Sie angeben möchten, dass ein bestimmtes Leerzeichen nicht ignoriert werden soll, fügen Sie vor dem Leerzeichen einen umgekehrten Schrägstrich ein. Die beiden folgenden regulären Ausdrücke sind beispielsweise gleichwertig:
/foo bar/ /foo \ bar/x
Die lastIndex-Eigenschaft gibt die Indexposition im String an, ab der die nächste Suche beginnen soll. Diese Eigenschaft hat Auswirkungen auf die Methoden exec() und test(), die für einen regulären Ausdruck aufgerufen werden, bei dem das g-Flag auf true gesetzt ist. Betrachten Sie den folgenden Beispielcode:
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);
}
Die lastIndex-Eigenschaft ist in der Standardeinstellung auf 0 gesetzt (damit Suchvorgänge am Anfang eines Strings gestartet werden). Nach jeder Übereinstimmung wird die Eigenschaft auf die Indexposition nach der Übereinstimmung gesetzt. Dies ergibt die folgende Ausgabe für das vorherige Codebeispiel:
0 5 11 18 25 36 44
Wenn das global-Flag auf false gesetzt ist, verwenden oder setzen die Methoden exec() und test() die lastIndex-Eigenschaft nicht.
Die Methoden match(), replace() und search() der String-Klasse starten alle Suchvorgänge am Anfang eines Strings, unabhängig von der Einstellung der lastIndex-Eigenschaft des regulären Ausdrucks, der zum Aufrufen der entsprechenden Methode verwendet wird. (Mit der match()-Methode wird die lastIndex-Eigenschaft jedoch auf 0 gesetzt.)
Sie können die lastIndex-Eigenschaft setzen, um die Anfangsposition in dem String anzupassen, in dem nach einer Übereinstimmung mit einem regulären Ausdruck gesucht werden soll.
Mit der source-Eigenschaft wird der String angegeben, der das Muster in einem regulären Ausdruck definiert. Beispiel:
var pattern:RegExp = /foo/gi; trace(pattern.source); // foo
Flash CS3
Eine E-Mail an mich senden, wenn dieser Seite Kommentare hinzugefügt werden | Kommentarbericht
Aktuelle Seite: http://livedocs.adobe.com/flash/9.0_de/main/00000119.html