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\dile 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
\bkullanabiliriz:\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,},3veya 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?rkalıbı, ilk önceoiçin, ardındanu(sıfır veya bir adet) için, ve daha sonrasındariçin arama yapar.Yani,
colou?r, hemcolorhem decolouröÄ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):alert( "100 10 1".match(/\d0*/g) ); // 100, 10, 1Bunu
+(bir veya daha fazlası) ile karÅılaÅtıralım:alert( "100 10 1".match(/\d0+/g) ); // 100, 10 // 1 eÅleÅmedi, çünkü 0+ ifadesi en az bir sıfır varlıÄını gerektirir.
Daha Fazla Ãrnek
Nicelik belirteçleri sıklıkla kullanılır. KarmaÅık düzenli ifade kalıplarının (regexp pattern) âyapı taÅıâ olarak kullanılırlar. Bu yüzden daha fazla örnek görelim.
Ondalık kesirler için düzenli ifadeler (regexp) (kayan noktalı bir sayı): \d+\.\d+
alert( "0 1 12.345 7890".match(/\d+\.\d+/g) ); // 12.345
âNitelik barındırmayan HTML açılıŠetiketleriâ için bir düzenli ifade (regexp),<span> veya <p> gibi.
-
En basit olanı:
/<[a-z]+>/ialert( "<body> ... </body>".match(/<[a-z]+>/gi) ); // <body>Bu düzenli ifade (regexp), ilk olarak
'<'için, ardından bir veya daha fazla Latin harfi için ve daha sonrasında'>'için bir arama yapar. -
GeliÅmiÅ hali:
/<[a-z][a-z0-9]*>/iStandarda göre HTML etiket isimleri
<h1>gibi ilk karakter dıÅında herhangi bir pozisyonda bir rakam içerebilir.alert( "<h1>Hi!</h1>".match(/<[a-z][a-z0-9]*>/gi) ); // <h1>
âNitelik barındırmayan HTML açılıŠve kapanıŠetiketleriâ için düzenli ifade (regexp): /<\/?[a-z][a-z0-9]*>/i
Kalıbın baÅında /? ile isteÄe baÄlı bir eÄik çizgi (slash) belirttim. Ters eÄik çizgiyle (backslash) bundan kurtuldum, aksi takdirde JavaScript bunun, düzenli ifade kalıbının sonu olduÄunu düÅünecekti.
alert( "<h1>Merhaba!</h1>".match(/<\/?[a-z][a-z0-9]*>/gi) ); // <h1>, </h1>
Bu örneklerde genel bir kural görebiliriz: düzenli ifade ne kadar tutarlı/kesin ise o kadar uzun ve karmaÅıktır.
ÃrneÄin, HTML etiketleri için daha basit bir ifade kullanabiliriz: <\w+>. Ancak HTML, etiket isimleri için kısıtlamalara sahip olduÄundan dolayı, <[a-z][a-z0-9]*> daha güvenilirdir.
<\w+> kalıbını kullanabilir miyiz yoksa <[a-z][a-z0-9]*> kalıbını mı kullanmamız gerekir?
Gerçek hayatta ikiside kabul edilebilir. âEkstraâ eÅleÅmelere ne kadar tahammül edebileceÄimize ya da bunları baÅka yollarla sonuçtan çıkarmanın zor olup olmadıÄına baÄlıdır.
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. EÄer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)