JavaScript регулардык ifадаларында replace методунун коллбэги
Replace методу экинчи параметр катары жөн гана строканы эмес, коллбэк-функциясын да кабыл ала алат, ал функция ар бир табылган айкалыш үчүн колдонулат. Регулярдык ифода тапкан ар бир подстрока, ошол подстрока үчүн бул функция кайтарган нерсеге алмаштырылат.
Бул функцияга параметрлер берилиши мүмкүн: биринчи параметрге табылган строка коюлат, экинчи параметрге - биринчи карман, үчүнчү параметрге - экинчи карман жана ушул сыяктуу - регулардык ифодада канча карман болсо, ошончо параметр жасаса болот.
Аяккыга чейинки параметрге табылган айкалыштын позициясы коюлат, ал эми аяккы параметрге - издөө жүргүзүлгөн бардык строка.
Булардын баары кандайча иштейт - практикалык мисалдар менен карап чыгабыз.
Мисал
Сандар менен берилген строка болсун:
javascriptlet str = '2 3 4 5';
Келгиле, бул сандарды алардын квадраттарына алмаштыралы. Башында келгиле, коллбэк-функциясында биздин сандарды ырааттуу консолго чыгаралы:
javascriptstr.replace(/\d+/g, function(match) {
console.log(match);
});
Биздин код алгач '2' чыгарат, андан кийин
'3', '4' жана '5'. Башкача айтканда
match өзгөрмөсүнө регулардык ифода тапкан
строкалар ырааттуу түшөт.
Келгиле, маселени аягына чейин чечели - match
квадратка көтөрөлү жана аны return менен кайтаралы. Табылган
эки үчүн 4 кайтарылып, эки ошол төрткө
алмашылат, табылган үч үчүн 9 кайтарылып, үч ошол тогузга
алмашылат - жана ушул сыяктуу:
javascriptlet result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // '4 9 16 25' чыгарат
Мисал
Эми строкада '2+3=' түрүндөгү конструкциялар берилсин:
javascriptlet str = '2+3= 4+5= 6+7=';
Келгиле, барабар белгиден кийин тиешелүү сандардын суммалары кошулсун. Башкача айтканда, биздин строка төмөнкүгө айланушу керек:
javascript'2+3=5 4+5=9 6+7=13'
Маселени чечүү үчүн келгиле дагы эксперимент жүргүзөлү - биринчи жана экинчи кошулуучуларды бөлүк бөлүк кармандарга бөлөлү:
javascriptstr.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
Эми маселени акыркы чечели: ар бир
табылган подстрока үчүн биринчи жана
экинчи кармандарды суммалайлы, нөлдүнчү карманды (табылган
строканы, мисалы '2+3=') алалы, ага
натыйжаны кошолу жана мунун баарын return аркылуу кайтаралы:
javascriptlet result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
let sum = Number(match1) + Number(match2);
return match0 + sum;
});
console.log(result);
Практикалык маселелер
Төмөнкү строка берилсин:
javascriptlet str = 'aaa [2] bbb [3] ccc [12] ddd';
Каша ичинде турган сандарды таап, аларды эки эсе көбөйткүлө. Башкача айтканда, биздин строкадан төмөнкү чыгуу керек:
javascript'aaa [4] bbb [6] ccc [24] ddd'
Төмөнкү строка берилсин:
javascriptlet str = '123 456 789';
Бардык сандарды таап, алардын цифраларын тескери тартипте которгула. Башкача айтканда, биздин строкадан төмөнкү чыгуу керек:
javascript'321 654 987'
Даталар менен берилген строка:
javascriptlet str = '31.12.2025 30.11.2024 29.10.2023';
Бардык даталарды таап, аларды башка форматта өзгөртүп, төмөнкү строка чыксын:
javascript'2025-12-31 2024-11-30 2023-10-29'