Callback katika njia replace katika misimbo ya kawaida ya JavaScript
Njia replace inaweza kuchukua kigezo cha pili sio tu kamba, bali pia kitendo-callback, ambacho kitatumika kwa kila mechi iliyopatikana. Kila kamba ndogo, ambayo misimbo ya kawaida ilipata, itabadilishwa na kile ambacho kitakachorudishwa na kitendo hiki kwa kamba ndogo husika.
Kwa kitendo hiki unaweza kupitisha viambajengo: kiambajengo cha kwanza kitaweka kamba iliyopatikana, kiambajengo cha pili - mfuko wa kwanza, kiambajengo cha tatu - mfuko wa pili na kadharika - unaweza kufanya viambajengo vingapi, mifuko mingapi katika usemi wa kawaida.
Katika kiambajengo cha karibu cha mwisho kitawekwa nafasi ya mechi iliyopatikana, na katika kiambajengo cha mwisho - kamba yote, ambayo utafutaji unafanywa.
Jinsi yote haya yanavyofanya kazi - tutachambua kwa mifano ya vitendo.
Mfano
Hebu iwe na kamba na nambari:
let str = '2 3 4 5';
Wacha tubadilishe nambari hizi kuwa mraba wao. Kwa kuanza hebu tuonyeshe nambari zetu kwa mfuatano kwenye koni katika kitendo-callback:
str.replace(/\d+/g, function(match) {
console.log(match);
});
Kodi yetu itaonyesha kwanza '2', kisha
'3', '4' na '5'. Yaani
kwenye kigezo match kwa mfuatano huingia
kamba hizo, ambazo misimbo ya kawaida ilizipata.
Wacha tutatue tatizo hadi mwisho - tutainua
match kwa mraba na kuirudisha
kwa kutumia return. Itatokea, kwamba kwa nambari mbili
iliyopatikana itarudishwa 4 na nambari mbili itabadilishwa
kuwa nne hii, kwa nambari tatu iliyopatikana itarudishwa
9 na nambari tatu itabadilishwa kuwa tisa
- na kadharika:
let result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // itaonyesha '4 9 16 25'
Mfano
Hebu sasa kwenye kamba iwe na miundo ya aina
'2+3=':
let str = '2+3= 4+5= 6+7=';
Wacha tufanye ili baada ya sawa kuingizwe jumla ya nambari husika. Yaani kamba yetu ibadilike kuwa ifuatayo:
'2+3=5 4+5=9 6+7=13'
Kutatua tatizo hebu tena tujaribu - tutatenganisha nambari ya kwanza na ya pili kwa mifuko tofauti:
str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
Na sasa tutatua tatizo kabisa: kwa kila
kamba ndogo iliyopatikana tutajumlisha mfuko wa kwanza na
wa pili, tutachukua mfuko wa sifuri (kamba
iliyopatikana, kwa mfano '2+3='), tuongeze
kwake matokeo na turudishe yote haya kupitia return:
let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
let sum = Number(match1) + Number(match2);
return match0 + sum;
});
console.log(result);
Matatizo ya Vitendo
Iwe na kamba:
let str = 'aaa [2] bbb [3] ccc [12] ddd';
Tafuta nambari, zilizo kwenye mabano na ziongezee mara mbili. Yaani kutoka kwenye kamba yetu inapaswa kupatikana ifuatayo:
'aaa [4] bbb [6] ccc [24] ddd'
Iwe na kamba:
let str = '123 456 789';
Tafuta nambari zote na uzibadilishe tarakimu zake kwa mpangilio wa nyuma. Yaani kutoka kwenye kamba yetu inapaswa kupatikana ifuatayo:
'321 654 987'
Iwe na kamba na tarehe:
let str = '31.12.2025 30.11.2024 29.10.2023';
Tafuta tarehe zote na ubadilishe kwa muundo mwingine ili kupatikana kamba ifuatayo:
'2025-12-31 2024-11-30 2023-10-29'