JavaScript регуляр ифодаларда гиёҳлар ичидаги дефис
Дефис - [ ] ичида ҳам maxsus символ
(аммо ташқарида - эмас). Агар сизга дефис ўзи символ сифатида керак бўлса - уни гурух бўлиб қолиш мумкин бўлмайдиган жойга қўйинг.
Бу нега муҳим: сиз ўзингиз сезмай turib символлар гурухи яратиб қўйишингиз мумкин. Масалан, '[:-@]' - сиз икки нуқта, дефис ва @(ит) белгисини танлайман деб ўйлайсиз, лекин аслида : ва @ ўртасидаги символлар гурухи ҳосил бўлади. Бу гурухга quyidagi символлар киради: ? < = > : ;
Улар қаердан келди? ASCII jadvalidan - икки нуқтанинг рақами @(ит) белгисиникидан кичкина - ва гурух ҳосил бўлади. Яъни барча гуруҳлар ASCII таблицаси бўйича ҳосил бўлади (исталганда будан фойдаланиш мумкин).
Бу билан курашиш қандай: дефис символini шундай жойга қўйингки,
у аник гурўҳ симфоли сифатида қabul қилинмасин,
масалан, бошланишида ёки охирида
(яъни [дан кейин ёки ]дан олдин).
Шунингдек, дефисни экранлаш мумкин - у ҳолда
у ўз ўрнига қарамай ўзини ифодалайди.
Масалан, [:-@] ўрнига
[:\-@] деб ёзинг - ва энди гуруҳ бўлмайди, балки
учта символ - икки нуқта, дефис ва @(ит) белгиси
@ бўлади.
Мисол
Quyidagi misolda qidirish shabloni shunday:
1 рақам, кейин 'a'
дан 'z' гача ҳарф, кейин 2 рақам:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
Натижада ўзгарувчига quyidagi қайд этилади:
'! 1-2 ! !'
Мисол
Келинг энди дефисни экранлаймиз. Натижада
qidirish shabloni shunday: 1 рақам, кейин
'a' ҳарф, ёки дефис, ёки 'z' ҳарф,
кейин 2 рақам:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
Натижада ўзгарувчига quyidagi қайд этилади:
'! ! 1c2 !'
Мисол
Уни экранламасдан, жуда қийин ўрнини ўзгартириш мумкин:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
Натижада ўзгарувчига quyidagi қайд этилади:
'! ! 1c2 !'
Мисол
Quyidagi misolda qidirish shabloni shunday:
биринчи символ - кичик ҳарфлар ёки
дефис '-', кейин иккита 'x' ҳарф:
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
Натижада ўзгарувчига quyidagi қайд этилади:
'! Axx ! @xx'
Мисол
Quyidagi misolda qidirish shabloni shunday:
биринчи символ - кичик, катта
ҳарфлар ёки дефис '-', кейин иккита
'x' ҳарф:
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
Натижада ўзгарувчига quyidagi қайд этилади:
'! ! ! @xx'
Мисол
Дефисни икки гуруҳ ўртасига қўйиш мумкин - у жерда у яна бир гуруҳ яратиш аник бўлмайди:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
Натижада ўзгарувчига quyidagi қайд этилади:
'! ! ! @xx'
Амалий масалалар
Берилган сатр:
let str = 'xaz xBz xcz x-z x@z';
Quyidagi shablon бўйича барча сатрларни топиш:
'x' ҳарф, катта ёки кичик
ҳарф ёки дефис, 'z' ҳарф.
Берилган сатр:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Quyidagi shablon бўйича барча сатрларни топиш:
'x' ҳарф, кейин ёки доллар, ёки
дефис ёки плюс, кейин 'z' ҳарф.