JavaScriptтеги регулярдук ичиндеги кармандар
Кармандардын мазмуну алмаштыруу сабында гана эмес, регулярдук ичинде да жеткиликтүү: биз бир нерсени карманга салып, андан кийин түз регулярда мында ошол кармандын мазмуну турушу керек деп айта алабыз.
Кармандардын мазмуну алардын номери боюнча жеткиликтүү,
анын алдына тескери кынык коюлат. Мисалы,
биринчи карман мындайча жеткиликтүү болот: \1,
экинчи карман мындайча - \2, үчүнчү
- \3 жана ушу сыяктуу.
Жогоруда жазылгандардын бардыгы сизге азырынча абдан так эмес көрүнөт деп ишенем. Бул таң калыштуу эмес, анткени кармандар - регулярдук өрнектердин эң түшүнүксүз жери. Келгиле, мисалдар аркылуу түшүнүп көрөлү.
Мисал
Анда бизде мындай сап бар дейли:
let str = 'aa bb cd ef';
Келгиле, андан бир катар турушкан каалаган эки бирдей тамга турушкан бардык орундарды табалы. Маселени чечүү үчүн каалаган тамганы издөө, аны карманга салуу, андан кийин кийинки символ ошол кармандын мазмуну экенин текшерүү:
let res = str.replace(/([a-z])\1/g, '!');
Натыйжада өзгөрмөгө төмөнкүсү жазылат:
'! ! cd ef'
Мисал
Анда бизде мындай сап бар дейли:
let str = 'asxca buzxb csgd';
Келгиле, анда биринчи жана акыркы тамгалары бирдей бардык сөздөрдү табалы. Чечүү үчүн маселени төмөнкүдөй үлгү жазабыз: тамга, андан кийин дагы бир же андан көп тамга, андан кийин биринчи тамга сыяктуу эле тамга:
let res = str.replace(/([a-z])[a-z]+\1/g, '!');
Натыйжада өзгөрмөгө төмөнкүсү жазылат:
'! ! csgd'
Практикалык тапшырмалар
Сап берилген:
let str = 'aaa bbb ccc xyz';
Бир катар турушкан үч бирдей тамга бар бардык ички саптарды тапкыла.
Сап берилген:
let str = 'a aa aaa aaaa aaaaa';
Бир катар турушкан эки же андан көп бирдей тамга бар бардык ички саптарды тапкыла.
Сап берилген:
let str = 'aaa aaa bbb bbb ccc ddd';
Бир катар турушкан эки бирдей сөз бар бардык ички саптарды тапкыла.