13 Mart 2024

Nicelik Belirteçleri +, *, ? and {n}

Diyelim ki +7(903)-123-45-67 şeklinde bir karakter dizimiz var ve biz bu dizideki sayıların tamamını bulmak istiyoruz. Ama öncekinden farklı olarak, tek bir sayıyla değil, bütün sayılarla ilgileniyoruz: 7, 903, 123, 45, 67.

Sayı, bir veya daha fazla rakamdan oluşan bir dizidir \d. Kaç tanesine sahip olduğumuzu işaretlemek için bir nicelik belirteci ekleyebiliriz.

Nicelik {n}

En basit nicelik belirteci, süslü parantezler içindeki bir sayıdır: {n}.

Bir karaktere (ya da bir karakter sınıfına, veya [...] kümesine vb.) nicelik belirteci eklendiğinde, bize kaç tanesine sahip olduğumuzu belirtir.

Birkaç gelişmiş formu var, örneklere bakalım:

Tam sayım: {5}

\d{5}, \d\d\d\d\d ile benzerdir. İkiside tam olarak 5 adet rakamı belirtir.

Aşağıdaki örnekte 5 basamaklı sayı aranır:

alert( "12345 yaşındayım".match(/\d{5}/) ); //  "12345"

Daha uzun sayıları hariç tutmak için \b kullanabiliriz: \b\d{5}\b.

{3,5}, 3 ila 5 aralığında eşleştirir

3 ila 5 basamaklı sayıları bulmak için sınırları süslü parantezlerin içinde belirtebiliriz: \d{3,5}

alert( "12 yaşında değilim, 1234 yaşındayım.".match(/\d{3,5}/) ); // "1234"

Üst sınırı kaldırabiliriz.

\d{3,}, 3 veya daha fazla basamaklı sayıları arar:

alert( "12 yaşında değilim, 345678 yaşındayım".match(/\d{3,}/) ); // "345678"

Şimdi +7(903)-123-45-67 değerine dönelim.

Sayı, arka arkaya bir veya daha fazla rakamdan oluşan bir dizidir. Yani düzenli ifade (regexp) şu şekilde olacaktır, \d{1,}:

let str = "+7(903)-123-45-67";

let numbers = str.match(/\d{1,}/g);

alert(numbers); // 7,903,123,45,67

Kısaltmalar

Çok kullanılan nicelik belirteçlerinin kısaltmaları mevcuttur:

+

“bir veya daha fazlası” anlamına gelir, {1,} ifadesine benzerdir.

Örneğin, \d+ sayıları aramak içindir:

let str = "+7(903)-123-45-67";

alert( str.match(/\d+/g) ); // 7,903,123,45,67
?

“sıfır ya da bir” anlamına gelir, {0,1} ifadesine benzerdir. Başka bir deyişle, isteğe bağlı hale getirir.

Örneğin, ou?r kalıbı, ilk önce o için, ardından u (sıfır veya bir adet) için, ve daha sonrasında r için arama yapar.

Yani, colou?r, hem color hem de colour öğelerini bulur:

let str = "Should I write color or colour?";

alert( str.match(/colou?r/g) ); // color, colour
*

“Sıfır veya daha fazlası” anlamına gelir, {0,} ile benzerdir. Yani bir karakter kendini tekrar edebilir veya hiç olmayabilir:

Örnek olarak, \d0*, bir sayı ve ardından onu takip eden sıfırları arar (çok sayıda sıfır olabilir ya da hiç olmayabilir):