JavaScript regular ifodalarda maxsus belgilarni ekranlash
Faraz qilaylik, biz maxsus belgi o‘zini o‘zi anglatishini xohlaymiz. Buning uchun uni teskari chiziq yordamida ekranlash kerak. Keling, misollar orqali ko‘rib chiqaylik.
Misol
Quyidagi misolda regular ifoda muallifi
qidiruv shabloni şunday ko‘rinishga ega bo‘lishini xohlagan: harf
'a', keyin plus '+', keyin
harf 'x'. Biroq, kod muallifi
'+' belgisini ekranlamagan va shuning
uchun qidiruv shabloni aslida şunday ko‘rinadi:
harf 'a' bir yoki bir necha marta, keyin
harf 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Natijada o‘zgaruvchiga quyidagi yoziladi:
'a+x ! ! !'
Misol
Endi esa muallif plusni teskari chiziq bilan
ekranladi. Endi qidiruv shabloni xohlagandek
ko‘rinadi: harf 'a', keyin plus
'+', keyin harf 'x'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Natijada o‘zgaruvchiga quyidagi yoziladi:
'! ax aax aaax'
Misol
Ushbu misolda shablon şunday ko‘rinadi: harf
'a', keyin nuqta '.', keyin
harf 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Natijada o‘zgaruvchiga quyidagi yoziladi:
'! abx azx'
Misol
Quyidagi misolda muallif nuqtani ekranlashni unutgan va regular ifoda barcha pastki qatorlarni qamrab oldi, chunki ekranlanmagan nuqta har qanday belgini anglatadi:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Natijada o‘zgaruvchiga quyidagi yoziladi:
'! ! !'
Eslatma
Diqqat qiling, agar siz nuqta uchun teskari chiziqni untasangiz (u o‘zini o‘zi anglatishi kerak bo‘lsa) - buni sezmasligingiz ham mumkin:
'a.x'.replace(/a.x/g, '!'); // '!' ni qaytaradi, xohlagandek
Vizual olarak to‘g‘ri ishlaydi (chunki nuqta
har qanday belgini, shu jumladan oddiy
nuqta '.' ni ham anglatadi). Lekin agar almashtirishlar
bajarilayotgan qatorni o‘zgartirsak - xatomizni
ko‘ramiz:
'a.x abx azx'.replace(/a.x/g, '!'); // '! ! !' ni qaytaradi, kutayotgan edik '! abx azx'
Maxsus belgilar va oddiy belgilar ro‘yxati
Agar oddiy belgini ekranlasangiz - hech qanday yomon narsa bo‘lmaydi - u baribir o‘zini anglatadi. Istisno - raqamlar, ularni ekranlab bo‘lmaydi.
Ko‘pincha shubha paydo bo‘ladi, ma'lum bir belgi maxsusmi yoki yo‘qmi. Ba'zilar hattoki barcha shubhali belgilarni ketma-ket ekranlashgacha boradi. Biroq, bu yomon amaliyotdir (regular ifodani teskari chiziqlar bilan to‘ldiradi).
Maxsus belgilar hisoblanadi: $ ^ . * + ? \
/ {} [] () |
Maxsus belgilar hisoblanmaydi: @ : , ' " ;
- _ = < > % # ~ `& !
Amaliy vazifalar
Berilgan qator:
let str = 'a.a aba aea';
'a.a' qatorini topadigan, qolganlarini
qamramaydigan regular ifoda yozing.
Berilgan qator:
let str = '2+3 223 2223';
'2+3' qatorini topadigan, qolganlarini
qamramaydigan regular ifoda yozing.
Berilgan qator:
let str = '23 2+3 2++3 2+++3 345 567';
'2+3', '2++3', '2+++3'
qatorlarini topadigan, qolganlarini qamramaydigan
regular ifoda yozing (+ har qanday
sonda bo‘lishi mumkin).
Berilgan qator:
let str = '23 2+3 2++3 2+++3 445 677';
'23', '2+3', '2++3',
'2+++3' qatorlarini topadigan, qolganlarini
qamramaydigan regular ifoda yozing.
Berilgan qator:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
'*q+', '*qq+', '*qqq+'
qatorlarini topadigan, qolganlarini qamramaydigan
regular ifoda yozing.
Berilgan qator:
let str = '[abc] {abc} abc (abc) [abc]';
Kvadrat qavs ichidagi qatorlarni topadigan
va ularni '!' ga almashtiradigan regular ifoda yozing.