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':

javascriptlet str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');

Natijada o‘zgaruvchiga quyidagi yoziladi:

javascript'a+x ! ! !'

Misol

Endi esa muallif plusni teskari chiziq bilan ekranladi. Endi qidiruv shabloni xohlagandek ko‘rinadi: harf 'a', keyin plus '+', keyin harf 'x'.

javascriptlet str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');

Natijada o‘zgaruvchiga quyidagi yoziladi:

javascript'! ax aax aaax'

Misol

Ushbu misolda shablon şunday ko‘rinadi: harf 'a', keyin nuqta '.', keyin harf 'x':

javascriptlet str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');

Natijada o‘zgaruvchiga quyidagi yoziladi:

javascript'! abx azx'

Misol

Quyidagi misolda muallif nuqtani ekranlashni unutgan va regular ifoda barcha pastki qatorlarni qamrab oldi, chunki ekranlanmagan nuqta har qanday belgini anglatadi:

javascriptlet str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');

Natijada o‘zgaruvchiga quyidagi yoziladi:

javascript'! ! !'

Eslatma

Diqqat qiling, agar siz nuqta uchun teskari chiziqni untasangiz (u o‘zini o‘zi anglatishi kerak bo‘lsa) - buni sezmasligingiz ham mumkin:

javascript'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:

javascript'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

Задание 1

Berilgan qator:

javascriptlet str = 'a.a aba aea';

'a.a' qatorini topadigan, qolganlarini qamramaydigan regular ifoda yozing.

Задание 2

Berilgan qator:

javascriptlet str = '2+3 223 2223';

'2+3' qatorini topadigan, qolganlarini qamramaydigan regular ifoda yozing.

Задание 3

Berilgan qator:

javascriptlet 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).

Задание 4

Berilgan qator:

javascriptlet str = '23 2+3 2++3 2+++3 445 677';

'23', '2+3', '2++3', '2+++3' qatorlarini topadigan, qolganlarini qamramaydigan regular ifoda yozing.

Задание 5

Berilgan qator:

javascriptlet str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';

'*q+', '*qq+', '*qqq+' qatorlarini topadigan, qolganlarini qamramaydigan regular ifoda yozing.

Задание 6

Berilgan qator:

javascriptlet str = '[abc] {abc} abc (abc) [abc]';

Kvadrat qavs ichidagi qatorlarni topadigan va ularni '!' ga almashtiradigan regular ifoda yozing.