JavaScript-də RegExp xüsusi simvolların ekranlanması
Tutaq ki, biz istəyirik ki, xüsusi simvol özünü ifadə etsin. Bunun üçün onu əks sləş ilə ekranlamaq lazımdır. Gəlin nümunələrə baxaq.
Nümunə
Aşağıdakı nümunədə regex-in müəllifi axtarış şablonunun belə görünməsini istəyirdi: hərf
'a', sonra plus '+', sonra
hərf 'x'. Lakin, kodun müəllifi
'+' simvolunu ekranlamayıb və buna görə də
axtarış şablonu əslində belə görünür:
hərf 'a' bir və ya daha çox dəfə, sonra
hərf 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Nəticədə dəyişənə aşağıdakı yazılacaq:
'a+x ! ! !'
Nümunə
İndi isə müəllif plusu əks sləş ilə ekranlayıb.
İndi axtarış şablonu lazım olan kimi görünür:
hərf 'a', sonra plus
'+', sonra hərf 'x'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ax aax aaax'
Nümunə
Bu nümunədə şablon belə görünür: hərf
'a', sonra nöqtə '.', sonra
hərf 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! abx azx'
Nümunə
Aşağıdakı nümunədə müəllif nöqtəni ekranlamağı unudub və regex bütün alt sətirləri tutdu, çünki ekranlanmamış nöqtə hər hansı simvolu ifadə edir:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ! !'
Qeyd
Diqqət edin ki, əgər siz nöqtə üçün əks sləşi unutsanız (o, özünü ifadə etməlidir) - bunu heç hiss etməyə bilərsiniz:
'a.x'.replace(/a.x/g, '!'); // '!' qaytaracaq, istədiyimiz kimi
Vizual olaraq düzgün işləyir (çünki nöqtə
hər hansı simvolu, o cümlədən adi nöqtəni '.' ifadə edir). Lakin əgər dəyişdirsək
əvəz olunan sətiri - biz səhvimizi görəcəyik:
'a.x abx azx'.replace(/a.x/g, '!'); // '! ! !' qaytaracaq, gözlənilirdi '! abx azx'
Xüsusi simvolların və adi simvolların siyahısı
Əgər adi simvolu ekranlasanız - heç bir pis şey olmaz - o yenə də özünü ifadə edəcək. İstisna - rəqəmlər, onları ekranlamaq olmaz.
Tez-tez şübhə yaranır, verilmiş simvolun xüsusi olub-olmadığı barədə. Bəziləri o həddə çatırlar ki, şübhəli simvolları ekranlayırlar. Lakin, bu pis təcrübədir (regex-i əks sləşlərlə çirkləndirir).
Xüsusi simvollardır: $ ^ . * + ? \
/ {} [] () |
Xüsusi simvol deyillər: @ : , ' " ;
- _ = < > % # ~ `& !
Praktiki tapşırıqlar
Sətir verilib:
let str = 'a.a aba aea';
'a.a' sətirini tapacaq, qalanlarını tutmayacaq
regex yazın.
Sətir verilib:
let str = '2+3 223 2223';
'2+3' sətirini tapacaq, qalanlarını tutmayacaq
regex yazın.
Sətir verilib:
let str = '23 2+3 2++3 2+++3 345 567';
'2+3', '2++3', '2+++3'
sətirlərini tapacaq, qalanlarını tutmayacaq regex yazın
(+ istənilən sayda ola bilər).
Sətir verilib:
let str = '23 2+3 2++3 2+++3 445 677';
'23', '2+3', '2++3',
'2+++3' sətirlərini tapacaq, qalanlarını tutmayacaq regex yazın.
Sətir verilib:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
'*q+', '*qq+', '*qqq+'
sətirlərini tapacaq, qalanlarını tutmayacaq regex yazın.
Sətir verilib:
let str = '[abc] {abc} abc (abc) [abc]';
Kvadrat mötərizələrdə olan sətirləri tapacaq və onları '!' ilə əvəz edəcək regex yazın.