Atgalinio kvietimo funkcija replace metode su reguliariaisiais reiškiniais JavaScript

Replace metodas antrą parametrą gali priimti ne tik eilutę, bet ir atgalinio kvietimo funkciją, kuri bus pritaikyta kiekvienam rastam atitikmeniui. Kiekviena eilutės dalis, kurią rado reguliarusis reiškinys, bus pakeista tuo, ką grąžins ši funkcija būtent tai eilutės daliai.

Į šią funkciją galima perduoti parametrus: į pirmą parametrą bus padėta rasta eilutė, į antrą parametrą - pirmoji "kišenė", į trečią parametrą - antroji "kišenė" ir taip toliau - galima daryti tiek parametrų, kiek "kišenių" reguliarajame reiškinyje.

Į priešpaskutinį parametrą bus padėta pozicija rasto atitikmens, o į paskutinį - visa eilutė, kurioje vykdoma paieška.

Kaip visa tai veikia - išnagrinėsime praktiniais pavyzdžiais.

Pavyzdys

Tegu duota eilutė su skaičiais:

javascriptlet str = '2 3 4 5';

Pakeiskime šiuos skaičius jų kvadratais. Pirmiausia tiesiog išveskime savo skaičius paeiliui į konsolę atgalinio kvietimo funkcijoje:

javascriptstr.replace(/\d+/g, function(match) {
  console.log(match);
});

Mūsų kodas iš pradžių išves '2', paskui '3', '4' ir '5'. Tai yra, į kintamąjį match paeiliui pateks tos eilutės, kurias rado reguliarusis reiškinys.

Išspręskime užduotį iki galo - kelsime match kvadratu ir grąžinsime jį naudodami return. Gausis, kad už rastą dvejetą bus grąžintas 4 ir dvejetas bus pakeistas šiuo ketvertu, už rastą trejetą bus grąžintas 9 ir trejetas bus pakeistas šiuo devynetu - ir taip toliau:

javascriptlet result = str.replace(/\d+/g, function (match) {
  return match**2; 
});

console.log(result); // išves '4 9 16 25'

Pavyzdys

Tegu dabar eilutėje pateiktos konstrukcijos tipo '2+3=':

javascriptlet str = '2+3= 4+5= 6+7=';

Padarykime taip, kad po lygybės ženklo būtų įterptos atitinkamų skaičių sumos. Tai yra, mūsų eilutė turėtų virsti šia:

javascript'2+3=5 4+5=9 6+7=13'

Spręsdami užduotį vėl paeksperimentuokime - išskirkime pirmą ir antrą dėmenis į atskiras "kišenes":

javascriptstr.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
  console.log(match0, match1, match2);
});

O dabar galutinai išspręskime užduotį: kiekvienai rastai eilutės daliai susumuokime pirmą ir antrą "kišenes", paimkime nulinę "kišenę" (rastą eilutę, pavyzdžiui '2+3='), pridėkime prie jos rezultatą ir grąžinkime visa tai per return:

javascriptlet result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
  let sum = Number(match1) + Number(match2);
  return match0 + sum;
});

console.log(result);

Praktinės užduotys

Задание 1

Duota eilutė:

javascriptlet str = 'aaa [2] bbb [3] ccc [12] ddd';

Raskite skaičius, esančius skliaustuose ir padidinkite juos dvigubai. Tai yra, iš mūsų eilutės turėtų gautis tokia:

javascript'aaa [4] bbb [6] ccc [24] ddd'
Задание 2

Duota eilutė:

javascriptlet str = '123 456 789';

Raskite visus skaičius ir apverskite jų skaitmenis atvirkštine tvarka. Tai yra, iš mūsų eilutės turėtų gautis tokia:

javascript'321 654 987'
Задание 3

Duota eilutė su datomis:

javascriptlet str = '31.12.2025 30.11.2024 29.10.2023';

Raskite visas datas ir paverskite jas kitu formatu taip, kad gautųsi tokia eilutė:

javascript'2025-12-31 2024-11-30 2023-10-29'