Aşağıdaki gibi, desenlerde karakterlerin veya sıraların yinelemesini belirtmek için nicelik belirteçlerini kullanırsınız:
Nicelik belirteci meta karakteri
|
Açıklama
|
*
(yıldız)
|
Sıfır veya birkaç kere yinelenen önceki öğeyle eşleşir.
|
+
(artı)
|
Bir veya birkaç kere yinelenen önceki öğeyle eşleşir.
|
?
(soru işareti)
|
Sıfır veya bir kere yinelenen önceki öğeyle eşleşir.
|
{
n
}
{
n
,}
ve
{
n
,
n
}
|
Önceki öğe için sayısal nicelik belirtecini veya nicelik belirteci aralığını belirtir:
/A{27}/
, 27 kere yinelenen A karakteriyle eşleşir.
/A{3,}/
, en az 3 kere yinelenen A karakteriyle eşleşir.
/A{3,5}/
, 3 ile 5 defa yinelenen A karakteriyle eşleşir.
|
Tek bir karaktere, karakter sınıfına veya bir gruba nicelik belirteci uygulayabilirsiniz:
-
/a+/
, en az bir kere yinelenen
a
karakteriyle eşleşir.
-
/\d+/
, bir veya daha fazla rakamla eşleşir.
-
/[abc]+/
, her biri
a
,
b
veya
c
olacak şekilde bir veya birkaç karakterin yinelemesiyle eşleşir.
-
/(very, )*/
, ardından sıfır veya birkaç kere virgül ve boşluk gelen
very
sözcüğüyle eşleşir.
Nicelik belirteci uygulanmış parantez grupları içinde nicelik belirteçleri kullanabilirsiniz. Örneğin, aşağıdaki nitelik belirteci,
word
ve
word-word-word
öğeleriyle eşleşir:
/\w+(-\w+)*/
Varsayılan olarak, normal ifadeler
doyumsuz eşleşme olarak bilinen bir eşleşme gerçekleştirir.
Normal ifadedeki herhangi bir alt desen (örn.
.*
) normal ifadenin diğer bölümüne ilerlemeden önce dizede olabildiğince çok karakterle eşleşmeye çalışır. Örneğin, şu normal ifadeyi ve dizeyi göz önünde bulundurun:
var pattern:RegExp = /<p>.*<\/p>/;
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";
Normal ifade, dizenin tamamıyla eşleşir:
<p>Paragraph 1</p> <p>Paragraph 2</p>
Ancak yalnızca tek bir
<p>...</p>
grubuyla eşleşme yapmak istediğinizi varsayın. Bunu şu şekilde yapabilirsiniz:
<p>Paragraph 1</p>
Herhangi bir nicelik belirtecinden sonra soru işareti (
?
) ekleyerek, bu nicelik belirtecini
tembel nicelik belirteci
olarak değiştirin. Örneğin, tembel
*?
nicelik belirtecini kullanan şu normal ifade, sırayla
<p>
ve olabildiğince az sayıda karakter (tembel) ve sonra
</p>
içeren bir dizeyle eşleşir:
/<p>.*?<\/p>/
Nicelik belirteçleriyle ilgili olarak şu noktaları unutmayın:
-
{0}
ve
{0,0}
nicelik belirteçleri, bir öğeyi eşleşmeden hariç tutmaz.
-
/abc+*/
öğesinde olduğu gibi, birden çok nicelik belirtecini birleştirmeyin.
-
Nokta (.), ardından
*
nicelik belirteci gelse de,
s
(
dotall
) bayrağı ayarlanmadan satırlara yayılmaz. Örneğin, şu kodu göz önünde bulundurun:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*<\/p>/;
trace(str.match(re)); // null;
re = /<p>.*<\/p>/s;
trace(str.match(re));
// output: <p>Test
// Multiline</p>
Daha fazla bilgi için bkz.
Bayraklar ve özellikler
.