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.