Gruppen

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Sie können eine Gruppe in einem regulären Ausdruck durch Klammern angeben, wie im Folgenden dargestellt:

/class-(\d*)/

Eine Gruppe ist ein Teilbereich eines Musters. Gruppen können für Folgendes verwendet werden:

  • Anwenden eines Quantifizierers auf mehrere Zeichen

  • Trennen von Teilmustern zur alternativen Auswahl (mit dem Zeichen | )

  • Erfassen übereinstimmender Teilstrings (z. B. Verwenden von \1 in einem regulären Ausdruck, um einer vorherigen übereinstimmenden Gruppe zu entsprechen, oder analoges Verwenden von $1 in der replace() -Methode der String-Klasse)

In den folgenden Abschnitten finden Sie ausführliche Informationen zur Verwendung von Gruppen.

Verwenden von Gruppen mit Quantifizierern

Wenn Sie keine Gruppe verwenden, werden Quantifizierer wie folgt auf Zeichen oder Zeichenklassen angewendet, die vor dem Quantifizierer stehen:

var pattern:RegExp = /ab*/ ; 
// matches the character a followed by 
// zero or more occurrences of the character b 
 
pattern = /a\d+/;  
// matches the character a followed by  
// one or more digits 
 
pattern = /a[123]{1,3}/; 
// matches the character a followed by  
// one to three occurrences of either 1, 2, or 3

Sie können jedoch eine Gruppe verwenden, um einen Quantifizierer auf mehrere Zeichen oder Zeichenklassen anzuwenden:

var pattern:RegExp = /(ab)*/; 
// matches zero or more occurrences of the character a  
// followed by the character b, such as ababab 
 
pattern = /(a\d)+/; 
// matches one or more occurrences of the character a followed by  
// a digit, such as a1a5a8a3 
 
pattern = /(spam ){1,3}/;  
// matches 1 to 3 occurrences of the word spam followed by a space

Weitere Informationen zu Quantifizierern finden Sie unter Quantifizierer .

Verwenden von Gruppen mit dem Auswahlzeichen (|)

Mithilfe von Gruppen können Sie eine Zeichengruppe definieren, auf die das Auswahlzeichen ( | ) angewendet werden soll, wie im Folgenden dargestellt:

var pattern:RegExp = /cat|dog/; 
// matches cat or dog 
 
pattern = /ca(t|d)og/; 
// matches catog or cadog

Verwenden von Gruppen zum Zwischenspeichern übereinstimmender Teilstrings

Wenn Sie in einem Muster eine Standardgruppe in Klammern definieren, können Sie später im regulären Ausdruck auf die Gruppe verweisen. Dies wird als Rückverweis bezeichnet. Die entsprechenden Gruppen stellen zwischengespeicherte Gruppen dar. Die Sequenz \1 im folgenden regulären Ausdruck entspricht beispielsweise allen Teilstrings, die der in Klammern eingeschlossenen zwischengespeicherten Gruppe entsprechen:

var pattern:RegExp = /(\d+)-by-\1/; 
// matches the following: 48-by-48

Sie können bis zu 99 dieser Rückverweise in einem regulären Ausdruck angeben, indem Sie \1 , \2 , ... , \99 eingeben.

Ebenso können Sie bei der replace() -Methode der String-Klasse $1$99 verwenden, um die mit der zwischengespeicherten Gruppe übereinstimmenden Teilstrings im Ersetzungsstring einzufügen:

var pattern:RegExp = /Hi, (\w+)\./; 
var str:String = "Hi, Bob."; 
trace(str.replace(pattern, "$1, hello.")); 
  // output: Bob, hello.

Bei Verwendung von zwischengespeicherten Gruppen geben die exec() -Methode der RegExp-Klasse und die match() -Methode der String-Klasse Teilstrings zurück, die diesen Gruppen entsprechen:

var pattern:RegExp = /(\w+)@(\w+).(\w+)/; 
var str:String = "bob@example.com"; 
trace(pattern.exec(str)); 
  // bob@example.com,bob,example,com

Verwenden von nicht zwischengespeicherten Gruppen und Vorschaugruppen

Eine nicht zwischengespeicherte Gruppe wird nur zum Gruppieren verwendet. Sie wird nicht zwischengespeichert und kann deshalb nicht mit nummerierten Rückverweisen referenziert werden. Mithilfe von (?: und ) können Sie nicht zwischengespeicherte Gruppen wie folgt definieren:

var pattern = /(?:com|org|net);

Beachten Sie beispielsweise den Unterschied zwischen dem Einfügen von (com|org) in einer zwischengespeicherten und in einer nicht zwischengespeicherten Gruppe (mit der exec() -Methode werden zwischengespeicherte Gruppen nach der abgeschlossenen Suche aufgelistet):

var pattern:RegExp = /(\w+)@(\w+).(com|org)/; 
var str:String = "bob@example.com"; 
trace(pattern.exec(str)); 
// bob@example.com,bob,example,com 
 
//noncapturing: 
var pattern:RegExp = /(\w+)@(\w+).(?:com|org)/; 
var str:String = "bob@example.com"; 
trace(pattern.exec(str)); 
  // bob@example.com,bob,example

Ein spezieller Typ der zwischengespeicherten Gruppe ist die Vorschaugruppe , von der es zwei Typen gibt: die positive Vorschaugruppe und die negative Vorschaugruppe.

Mithilfe von (?= und ) können Sie eine positive Vorschaugruppe definieren, die nur das Teilmuster ab der übereinstimmenden Position enthält. Der Teil des Strings, der der positiven Vorschaugruppe entspricht, kann jedoch auch noch mit weiteren Mustern im regulären Ausdruck übereinstimmen. Da (?=e) im folgenden Code eine positive Vorschaugruppe ist, kann das mit ihr übereinstimmende Zeichen e auch einem darauf folgenden Teil im regulären Ausdruck entsprechen, in diesem Fall der zwischengespeicherten Gruppe (\w*) :

var pattern:RegExp = /sh(?=e)(\w*)/i; 
var str:String = "Shelly sells seashells by the seashore"; 
trace(pattern.exec(str)); 
// Shelly,elly

Mithilfe von (?! und ) können Sie eine negative Vorschaugruppe definieren, mit der angegeben wird, dass das Teilmuster in der Gruppe nicht an der entsprechenden Position übereinstimmen darf. Zum Beispiel:

var pattern:RegExp = /sh(?!e)(\w*)/i; 
var str:String = "She sells seashells by the seashore"; 
trace(pattern.exec(str)); 
// shore,ore

Verwenden von benannten Gruppen

Eine benannte Gruppe ist ein Gruppentyp in einem regulären Ausdruck, für die ein benannter Bezeichner angegeben ist. Mithilfe von (?P<name> und ) können Sie eine benannte Gruppe definieren. Der folgende reguläre Ausdruck enthält beispielsweise eine benannte Gruppe mit dem Bezeichner digits :

var pattern = /[a-z]+(?P<digits>\d+)[a-z]+/;

Bei Verwendung der exec() -Methode wird eine übereinstimmende benannte Gruppe als Eigenschaft des result -Arrays hinzugefügt:

var myPattern:RegExp = /([a-z]+)(?P<digits>\d+)[a-z]+/;  
var str:String = "a123bcd"; 
var result:Array = myPattern.exec(str); 
trace(result.digits); // 123

Es folgt ein weiteres Beispiel mit zwei benannten Gruppen mit den Bezeichnern name und dom :

var emailPattern:RegExp =  
    /(?P<name>(\w|[_.\-])+)@(?P<dom>((\w|-)+))+\.\w{2,4}+/;  
var address:String = "bob@example.com"; 
var result:Array = emailPattern.exec(address); 
trace(result.name); // bob 
trace(result.dom); // example
Hinweis: Benannte Gruppen sind nicht Bestandteil der ECMAScript-Sprachspezifikation. Es handelt sich um eine Funktionserweiterung von ActionScript 3.0.