Size pratik bir görev verildiÄini düÅünün â "+7(903)-123-45-67" gibi bir telefon numaramız var, ve bunu sadece sayılara dönüÅtürmemiz gerekiyor: 79035419441.
Bunu yapmak için sayı olmayan herhangi bir Åeyi bulabilir ve kaldırabiliriz. Karakter sınıfları bu konuda yardımcı olabilir.
Karakter sınıfı, belirli bir kümedeki herhangi bir sembolle eÅleÅen özel bir gösterimdir.
BaÅlangıç için ârakamâ sınıfını keÅfedelim. \d olarak yazılır ve âherhangi bir tek basamaÄaâ karÅılık gelir.
ÃrneÄin, telefon numarasındaki ilk haneyi bulalım:
let str = "+7(903)-123-45-67";
let regexp = /\d/;
alert( str.match(regexp) ); // 7
g iÅareti olmadan, düzenli ifade yalnızca ilk eÅleÅmeyi arar, yani ilk \d rakamını arar.
Tüm rakamları bulmak için g iÅaretini ekleyelim:
let str = "+7(903)-123-45-67";
let regexp = /\d/g;
alert( str.match(regexp) ); // eÅleÅenler dizisi: 7,9,0,3,1,2,3,4,5,6,7
// bunlardan sadece rakamlardan oluÅan telefon numarası yapalım:
alert( str.match(regexp).join('') ); // 79035419441
Bu rakamlar için bir karakter sınıfıydı. BaÅka karakter sınıfları da var.
En çok kullanılanlar:
\d(âdâ İngilizce âdigitâ kelimesinden geliyor)- Bir rakam:
0âdan9âa bir karakter. \s(âsâ İngilizce âspaceâ kelimesinden geliyor)- Bir boÅluk sembolü: boÅluklar, tablar
\t, yeni satırlar\nve\v,\f,\rgibi nadir karakterleri içerir. \w(âwâ İngilizce âwordâ kelimesinden geliyor)- Kelime karakteri: Latin alfabesinde bir harf ya da bir rakam ya da alt çizgi
_. Latince olmayan harfleri kapsamaz (Kiril veya Hintçe gibi).
ÃrneÄin, \d\s\w bir rakam, ardından bir boÅluk sembolü ve onun ardından bir kelime karakteri anlamına gelir, 1 a gibi.
Düzenli ifadeler hem normal semboller hem de karakter sınıfları içerebilir.
ÃrneÄin, CSS\d, ardından bir rakam gelen CSS ile eÅleÅir:
let str = "Is there CSS4?";
let regexp = /CSS\d/
alert( str.match(regexp) ); // CSS4
Ayrıca birçok karakter sınıfını aynı anda kullanabiliriz:
alert( "I love HTML5!".match(/\s\w\w\w\w\d/) ); // ' HTML5'
EÅleÅme (her karakter sınıfı, ona karÅılık gelen bir karaktere sahip):
Ters sınıflar
Her karakter sınıfı için aynı harfle gösterilen, ancak büyük harfle yazılmıŠbir âters sınıfâ vardır.
âTersâ, diÄer tüm karakterlerle eÅleÅtiÄi anlamına gelir, örneÄin:
\D- Rakam olmayan:
\dhariç herhangi bir karakter, örneÄin bir harf. \S- BoÅluk olmayan:
\shariç herhangi bir karakter, örneÄin bir harf. \W- Kelime karakteri olmayan:
\whariç herhangi bir karakter, yani Latin olmayan bir karakter veya boÅluk sembolü.
Bu bölümün baÅlangıcında, +7(903)-123-45-67 gibi bir stringâden, yalnızca numaralardan oluÅan telefon numarasının nasıl yapıldıÄını gördük: tüm rakamları bul ve birleÅtir.
let str = "+7(903)-123-45-67";
alert( str.match(/\d/g).join('') ); // 79031234567
Alternatif, daha kısa bir yol, rakam olmayan \D karakterleri bulmak ve bunları dizeden kaldırmaktır:
let str = "+7(903)-123-45-67";
alert( str.replace(/\D/g, "") ); // 79031234567
Nokta "herhangi bir karakter"tir
Nokta . yeni satır dıÅındaki herhangi bir karakterle eÅleÅen özel bir karakter sınıfıdır.
ÃrneÄin:
alert( "Z".match(/./) ); // Z
Veya düzenli ifadenin ortasında:
let regexp = /CS.4/;
alert( "CSS4".match(regexp) ); // CSS4
alert( "CS-4".match(regexp) ); // CS-4
alert( "CS 4".match(regexp) ); // CS 4 (boÅlukta bir karakter)
Bir noktanın âherhangi bir karakterâ anlamına geldiÄini, ancak âkarakterin olmamasıâ anlamına gelmediÄini lütfen unutmayın. EÅleÅecek bir karakter olmalı:
alert( "CS4".match(/CS.4/) ); // null, eÅleÅme yok çünkü nokta için karakter yok
âsâ iÅareti, kelimenin tam anlamıyla herhangi bir karakter olarak nokta
Normalde, bir nokta yeni satır \n karakteriyle eÅleÅmiyor.
ÃrneÄin, A.B, aralarında herhangi bir karakter olan A ve B ile eÅleÅir, yeni satır \n hariç:
alert( "A\nB".match(/A.B/) ); // null (eÅleÅme yok)
Noktanın kelimenin tam anlamıyla âherhangi bir karakterâ anlamına gelmesini istediÄimiz birçok durum vardır, yeni satır dahil.
s iÅte bunu yapar. EÄer düzenli ifadede varsa, nokta . tam anlamıyla herhangi bir karakter ile eÅleÅir:
alert( "A\nB".match(/A.B/s) ); // A\nB (eÅleÅti!)
En son destek durumu için https://caniuse.com/#search=dotall adresini ziyaret edin. Bu makale yazılırken, Firefox, IE, Edge desteklemiyordu.
Neyse ki, her yerde çalıÅan bir alternatif var. Herhangi bir karakteri eÅleÅtirmek için [\s\S] gibi bir normal ifade kullanabiliriz.
alert( "A\nB".match(/A[\s\S]B/) ); // A\nB (eÅleÅti!)
[\s\S] tam anlamıyla Åu anlama geliyor: âboÅluk karakteri VEYA boÅluk karakteri deÄilâ. BaÅka bir deyiÅle, âher Åeyâ. Bunun için baÅka bir karakter sınıfı da kullanabiliriz, [\d\D] gibi.
Bu numara her yerde çalıÅıyor. Ayrıca, bunu kalıpta normal âyeni satırla eÅleÅmeyenâ nokta istediÄimiz durumlarda s iÅaretini istemiyorsak kullanabiliriz.
Genellikle boÅluklara çok az dikkat ederiz. Bizim için 1-5 ve 1 - 5 stringâleri neredeyse aynıdır.
Ancak düzenli ifade boÅlukları dikkate almazsa, iÅe yaramayabilir.
Kısa çizgi ile ayrılmıŠrakamları bulmaya çalıÅalım:
alert( "1 - 5".match(/\d-\d/) ); // null, eÅleÅme yok
Bunu boÅluk ekleyerek düzeltelim \d - \d:
alert( "1 - 5".match(/\d - \d/) ); // 1 - 5, Åimdi çalıÅıyor
// veya \s sınıfını kullanabiliriz:
alert( "1 - 5".match(/\d\s-\s\d/) ); // 1 - 5, bu da çalıÅıyor
BoÅluk bir karakterdir. DiÄer herhangi bir karakterle aynı derecede önemlidir.
Düzenli ifadeye boÅluk ekleyip veya ifadeden boÅluk kaldırdıktan sonra bu ifadenin aynı Åekilde çalıÅmasını bekleyemeyiz.
BaÅka bir deyiÅle, normal bir ifadede tüm karakterler önemlidir, boÅluklar da.
Ãzet
AÅaÄıdaki karakter sınıfları vardır:
\dâ rakamlar.\Dâ rakam olmayanlar.\sâ boÅluk sembolleri, tablar, yeni satırlar.\Sâ\solmayan.\wâ Latin harfler, rakamlar, alt çizgi'_'.\Wâ\wolmayan..â's'varsa gerçekten herhangi bir karakter, yoksa yeni satır\nhariç herhangi bir karakter.
â¦Ama hepsi bu deÄil!
Stringâler için JavaScript tarafından kullanılan Unicode kodlama, karakterler için birçok özellik saÄlar, örneÄin: bir karakterin hangi dile ait olduÄu (eÄer bir harf ise) veya karakterin bir noktalama iÅareti olup olmadıÄı vb.
Bu özelliklere göre de arama yapabiliriz. Bu, bir sonraki makalede ele alınan u iÅaretini gerektirir.
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)