Gruplar

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Aşağıdaki gibi, parantezleri kullanarak normal ifadede bir grup belirtebilirsiniz:

/class-(\d*)/

Grup, bir desenin alt bölümüdür. Şunları yapmak için grupları kullanabilirsiniz:

  • Birden çok karaktere nicelik belirteci uygulama.

  • Uygulanacak alt desenleri, değiştirme yoluyla (| karakterini kullanarak) ayırma.

  • Alt dize eşleşmelerini yakalama (örneğin, önceden eşleşen bir grupla eşleşme sağlamak için normal ifadede \1 öğesini kullanarak veya String sınıfının replace() yönteminde aynı şekilde $1 öğesini kullanarak).

İlerleyen bölümlerde, grupların bu kullanımlarıyla ilgili ayrıntılar sağlanmaktadır.

Nicelik belirteçleriyle grupları kullanma

Bir grup kullanmazsanız, aşağıda gösterildiği gibi, nicelik belirteci kendisinden önceki karakter veya karakter sınıfı için geçerli olur:

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

Ancak, birden çok karakter veya karakter sınıfına nicelik belirteci uygulamak için bir grup kullanabilirsiniz:

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

Nicelik belirteçleri hakkında daha fazla bilgi için, bkz. Nicelik belirteçleri.

Değiştirici (|) karakteriyle grupları kullanma

Aşağıdaki gibi, değiştirici (|) karakteri uygulamak istediğiniz karakterler grubunu tanımlamak için grupları kullanabilirsiniz:

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

Alt dize eşleşmelerini yakalamak için grupları kullanma

Bir desende standart bir parantez grubu tanımladığınızda, daha sonra normal ifadede bu gruba başvurabilirsiniz. Bu, geribaşvuru olarak bilinir ve bu tür gruplar da yakalama grupları olarak adlandırılır. Örneğin, aşağıdaki normal ifadede \1 sırası, yakalama parantez grubunun eşleştiği tüm alt dizelerle eşleşir:

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

\1, \2, ... , \99 yazarak normal ifadede bu geribaşvuruların en fazla 99 tanesini belirtebilirsiniz.

Aynı şekilde, String sınıfının replace() yönteminde, yerini alan dizeye yakalanan grup alt dizesi eşleşmelerini eklemek için $1$99 öğesini kullanabilirsiniz:

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

Ayrıca, yakalama gruplarını kullanırsanız, RegExp sınıfının exec() yöntemi ve String sınıfının match() yöntemi, yakalama gruplarıyla eşleşen alt dizeleri döndürür:

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

Yakalama yapmayan grupları ve ileri yönlü grupları kullanma

Yakalama yapmayan grup, yalnızca gruplandırma için kullanılır; "toplanmaz" ve numaralandırılmış geribaşvurularla eşleşmez. Yakalama yapmayan grupları tanımlamak için şu şekilde (?: ve ) öğelerini kullanın:

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

Örneğin, bir yakalama grubuna ve yakalama yapmayan gruba (com|org) öğesinin koyulması arasındaki farka dikkat edin (exec() yöntemi, tam eşleşmeden sonra yakalama gruplarını listeler):

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

Yakalama yapmayan grubun özel bir türü ileri yönlü grup olup bunun da iki türü vardır: pozitif ileri yönlü grup ve negatif ileri yönlü grup.

Gruptaki alt desenin konumda eşleşmesi gerektiğini belirten bir pozitif ileri yönlü grup tanımlamak için (?= ve ) öğelerini kullanın. Ancak, dizenin pozitif ileri yönlü grupla eşleşen kısmı, normal ifadede kalan diğer desenlerle eşleşebilir. Örneğin, aşağıdaki kodda (?=e) bir pozitif ileri yönlü grup olduğundan, bunun eşleştiği e karakteri, normal ifadenin sonraki kısmıyla da (bu durumda yakalama grubu, \w*)) eşleşebilir:

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

Gruptaki alt desenin konumda eşleşmemesi gerektiğini belirten bir negatif ileri yönlü grup tanımlamak için, (?! ve ) öğelerini kullanın. Örneğin:

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

Adlandırılmış grupları kullanma

Adlandırılmış grup, normal ifadede, adlandırılmış bir tanımlayıcı verilmiş grup türüdür. Adlandırılmış grubu tanımlamak için, (?P<name> ve ) öğelerini kullanın. Örneğin, aşağıdaki normal ifade, digits adında tanımlayıcıyla adlandırılmış bir grup içerir:

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

exec() yöntemini kullandığınızda, eşleşen ada sahip bir grup result dizisinin bir özelliği olarak eklenir:

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

Aşağıda, name ve dom tanımlayıcılarıyla, adlandırılmış iki grup kullanan başka bir örnek verilmiştir:

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
Not: Adlandırılmış gruplar, ECMAScript dil belirtiminin parçası değildir. Bunlar ActionScript 3.0'a eklenen bir özelliktir.