JavaScript Düzenli İfadelerde Özel Karakterlerin Kaçışı
Diyelim ki, bir özel karakterin kendisini temsil etmesini istiyoruz. Bunun için ters eğik çizgi kullanarak kaçış yapmamız gerekir. Örneklerle görelim.
Örnek
Aşağıdaki örnekte, düzenli ifadeyi yazan kişi, arama kalıbının harf
'a', ardından artı '+', ardından
harf 'x' şeklinde olmasını istemişti. Ancak, kod yazarı
'+' karakterini kaçış yapmadığı için arama kalıbı aslında
şu şekildedir: harf 'a' bir veya daha fazla kez, sonra
harf 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Sonuç olarak değişkene şu yazılacaktır:
'a+x ! ! !'
Örnek
Şimdi ise yazar artı işaretini ters eğik çizgi ile kaçış yaptı. Artık arama kalıbı
olması gerektiği gibi görünüyor: harf 'a', ardından artı
'+', ardından harf 'x'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Sonuç olarak değişkene şu yazılacaktır:
'! ax aax aaax'
Örnek
Bu örnekte, kalıp şu şekildedir: harf
'a', ardından nokta '.', ardından
harf 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Sonuç olarak değişkene şu yazılacaktır:
'! abx azx'
Örnek
Aşağıdaki örnekte yazar noktayı kaçış yapmayı unuttu ve düzenli ifade tüm alt dizeleri yakaladı, çünkü kaçış yapılmamış nokta herhangi bir karakteri temsil eder:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Sonuç olarak değişkene şu yazılacaktır:
'! ! !'
Not
Bir nokta için ters eğik çizgi kullanmayı unutursanız (kendisini temsil etmesi gerektiğinde) - bunu fark etmeyebilirsiniz bile:
'a.x'.replace(/a.x/g, '!'); // istediğimiz gibi '!' döndürür
Görsel olarak doğru çalışıyor (çünkü nokta herhangi bir karakteri temsil eder, normal bir
nokta '.' dahil). Ancak değiştirmelerin yapıldığı dizgiyi değiştirirsek,
hatamızı göreceğiz:
'a.x abx azx'.replace(/a.x/g, '!'); // '! ! !' döndürür, beklenen '! abx azx' idi
Özel karakterlerin ve normal karakterlerin listesi
Normal bir karakteri kaçış yaparsanız - kötü bir şey olmaz - yine kendisini temsil edecektir. İstisna - rakamlar, onlar kaçış yapılamaz.
Sık sık, belirli bir karakterin özel olup olmadığı konusunda şüphe doğar. Bazıları şüpheli tüm karakterleri sırayla kaçış yapacak kadar ileri gider. Ancak, bu kötü bir uygulamadır (düzenli ifadeyi ters eğik çizgilerle kirletir).
Özel karakterler şunlardır: $ ^ . * + ? \
/ {} [] () |
Özel karakter olmayanlar: @ : , ' " ;
- _ = < > % # ~ `& !
Pratik Görevler
Bir dizge verildi:
let str = 'a.a aba aea';
'a.a' dizgesini bulan, diğerlerini yakalamayan bir düzenli ifade yazın.
Bir dizge verildi:
let str = '2+3 223 2223';
'2+3' dizgesini bulan, diğerlerini yakalamayan bir düzenli ifade yazın.
Bir dizge verildi:
let str = '23 2+3 2++3 2+++3 345 567';
'2+3', '2++3', '2+++3'
dizgelerini bulan, diğerlerini yakalamayan bir düzenli ifade yazın
(+ herhangi bir sayıda olabilir).
Bir dizge verildi:
let str = '23 2+3 2++3 2+++3 445 677';
'23', '2+3', '2++3',
'2+++3' dizgelerini bulan, diğerlerini yakalamayan bir düzenli ifade yazın.
Bir dizge verildi:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
'*q+', '*qq+', '*qqq+'
dizgelerini bulan, diğerlerini yakalamayan bir düzenli ifade yazın.
Bir dizge verildi:
let str = '[abc] {abc} abc (abc) [abc]';
Köşeli parantezler içindeki dizgeleri bulup '!' ile değiştiren bir düzenli ifade yazın.