JavaScript-ի ռեգուլյար արտահայտություններում հատուկ նիշերի էկրանավորում
Ենթադրենք, որ մենք ուզում ենք, որ հատուկ նիշը նշանակի ինքն իրեն: Դրա համար այն պետք է էկրանավորել հակադարձ շեղատողի օգնությամբ: Եկեք նայենք օրինակներով:
Օրինակ
Հաջորդ օրինակում ռեգուլյար արտահայտության հեղինակը ուզում էր,
որ որոնման ձևանմուշն ունենա այսպիսի տեսք՝ տառ
'a', ապա պլյուս '+', ապա
տառ 'x': Սակայն, կոդի հեղինակը
չէկրանավորեց '+' նիշը, և այդ պատճառով
որոնման ձևանմուշն իրականում ունի այս տեսքը՝
տառ 'a' մեկ կամ ավելի անգամ, ապա
տառ 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Արդյունքում փոփոխականի մեջ կգրվի հետևյալը՝
'a+x ! ! !'
Օրինակ
Հիմա հեղինակը էկրանավորել է պլյուսը հակադարձ
շեղատողով: Այժմ որոնման ձևանմուշն ունի այն տեսքը,
որը պետք է՝ տառ 'a', ապա պլյուս
'+', ապա տառ 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Արդյունքում փոփոխականի մեջ կգրվի հետևյալը՝
'! ax aax aaax'
Օրինակ
Այս օրինակում ձևանմուշն ունի այս տեսքը՝ տառ
'a', ապա կետ '.', ապա
տառ 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Արդյունքում փոփոխականի մեջ կգրվի հետևյալը՝
'! abx azx'
Օրինակ
Հաջորդ օրինակում հեղինակը մոռացել է էկրանավորել կետը, և ռեգուլյար արտահայտությանը համապատասխանել են բոլոր ենթատողերը, քանի որ չէկրանավորված կետը նշանակում է ցանկացած նիշ:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Արդյունքում փոփոխականի մեջ կգրվի հետևյալը՝
'! ! !'
Դիտողություն
Ուշադրություն դարձրեք, որ եթե մոռանաք հակադարձ շեղատողը կետի համար (երբ այն պետք է նշանակի ինքն իրեն) - դա կարելի է նույնիսկ չնկատել.
'a.x'.replace(/a.x/g, '!'); // կվերադարձնի '!', ինչպես մենք էլ ուզում էինք
Տեսողականորեն աշխատում է ճիշտ (քանի որ կետը
նշանակում է ցանկացած նիշ, այդ թվում նաև սովորական
կետ '.'): Բայց եթե փոխենք այն տողը,
որտեղ կատարվում են փոխարինումները - մենք կտեսնենք մեր
սխալը.
'a.x abx azx'.replace(/a.x/g, '!'); // կվերադարձնի '! ! !', իսկ սպասվում էր '! abx azx'
Հատուկ և սովորական նիշերի ցանկ
Եթե էկրանավորեք սովորական նիշ - ոչ մի սարսափելի բան չի պատահի - այն ամեն դեպքում կնշանակի ինքն իրեն: Բացառություն են կազմում թվանշանները, դրանք հնարավոր չէ էկրանավորել:
Հաճախ առաջանում է կասկած, արդյոք տվյալ նիշը հատուկ է: Ոմանք հասնում են նրան, որ էկրանավորում են բոլոր կասկածելի նիշերը անընդմեջ: Սակայն, սա վատ պրակտիկա է (աղտոտում է ռեգուլյար արտահայտությունը հակադարձ շեղատողներով):
Հատուկ նիշեր են՝ $ ^ . * + ? \
/ {} [] () |
Չեն հատուկ նիշեր՝ @ : , ' " ;
- _ = < > % # ~ `& !
Գործնական առաջադրանքներ
Տրված է տողը.
let str = 'a.a aba aea';
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'a.a' տողը՝ չբռնելով մնացածը:
Տրված է տողը.
let str = '2+3 223 2223';
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'2+3' տողը՝ չբռնելով մնացածը:
Տրված է տողը.
let str = '23 2+3 2++3 2+++3 345 567';
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'2+3', '2++3', '2+++3'
տողերը՝ չբռնելով մնացածը (+ կարող է լինել ցանկացած
քանակություն):
Տրված է տողը.
let str = '23 2+3 2++3 2+++3 445 677';
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'23', '2+3', '2++3',
'2+++3' տողերը՝ չբռնելով մնացածը:
Տրված է տողը.
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Գրեք ռեգուլյար արտահայտություն, որը կգտնի
'*q+', '*qq+', '*qqq+'
տողերը՝ չբռնելով մնացածը:
Տրված է տողը.
let str = '[abc] {abc} abc (abc) [abc]';
Գրեք ռեգուլյար արտահայտություն, որը կգտնի քառակուսի
փակագծերում գտնվող տողերը և կփոխարինի դրանք '!'-ով: