JavaScriptтеги регулярдык өрнектөрдө [ ] ичиндеги дефис
Дефис дагы [ ] ичинде атайын символ
(бирок сыртында - эмес). Эгерде сизге дефис өзү символ катары керек болсо - аны топ бөлүүчү катары кабыл алынбай турган жерге коюңуз.
Бул эмне үчүн маанилүү: сиз өзүңүз дагы көз карандысызда символдор тобун түзө аласыз. Мисалы,
ушундай - '[:-@]' - сиз үтүр, дефис жана @ белгисин тандап жатасыз деп ойлосоңуз да,
чынында : жана @ ортосундагы символдор тобу пайда болот. Бул топко төмөнкү символдор кирет: ? < = > : ;
Алар кайдан келип чыкты? ASCII таблицасынан - үтүрдүн номери @ белгисиникинен кичине - жана натыйжада топ пайда болот. Башкача айтканда, бардык топтор ASCII таблицасы боюнча пайда болот (каалоо менен буга пайдаланыууга болот).
Муну менен кантип күрөшүү керек: дефис символун так эле топ символу катары кабыл алынбай турган жерге, мисалы, башында же аягында
(башкача айтканда, [дан кийин же ]дан мурун) коюңуз.
Дефести чыңалоого да болот - анда ал кайсы жерде турбасын өзүн өзү билдирет.
Мисалы, [:-@] ордуна
[:\-@] деп жазууга болот - жана андан ары топ болбойт, ал эми
үч символ болот - үтүр, дефис жана @ белгиси @.
Мисал
Төмөнкү мисалда издөө үлгүсү төмөнкүдөй:
1-сан 1, андан кийин 'a'
дан 'z' га чейинки тамга, андан кийин 2-сан 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! 1-2 ! !'
Мисал
Келгиле, эми дефести чыңалуу таптап көрөлү. Натыйжада
издөө үлгүсү төмөнкүдөй: 1-сан 1, андан кийин
'a' тамгасы, же дефис, же 'z' тамгасы,
андан кийин 2-сан 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! ! 1c2 !'
Мисал
Дефести чыңалбастан эле жайгаштырууга болот:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! ! 1c2 !'
Мисал
Төмөнкү мисалда издөө үлгүсү төмөнкүдөй:
биринчи символ - бул кичине тамгалар же
дефис '-', андан кийин эки 'x' тамгасы:
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! Axx ! @xx'
Мисал
Төмөнкү мисалда издөө үлгүсү төмөнкүдөй:
биринчи символ - бул кичине, чоң
тамгалар же дефис '-', андан кийин эки 'x' тамгасы:
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! ! ! @xx'
Мисал
Дефести эки топтун ортосуна жайгаштырууга болот - анда ал так эле дагы бир топ кылбайт:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! ! ! @xx'
Практикалык тапшырмалар
Белгиленген сап:
let str = 'xaz xBz xcz x-z x@z';
Төмөнкү үлгү боюнча бардык саптарды табыңыз:
'x' тамгасы, андан кийин чоң же кичине
тамга же дефис, андан кийин 'z' тамгасы.
Белгиленген сап:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Төмөнкү үлгү боюнча бардык саптарды табыңыз:
'x' тамгасы, андан кийин $ белгиси, же
дефис же кошуу белгиси, андан кийин 'z' тамгасы.