⊗jsSpRERMC 127 of 294 menu

Callback a replace metódusban JavaScript reguláris kifejezéseknél

A replace metódus második paramétereként nem csak egy sztringet fogadhat, hanem egy callback függvényt is, amely minden egyes találatra alkalmazva lesz. Minden, a reguláris kifejezés által megtalált reszsztring le lesz cserélve arra, amit ez a függvény éppen az adott reszsztringre visszaad.

Ehhez a függvényhez paramétereket lehet átadni: az első paraméterbe a megtalált sztring kerül, a második paraméterbe - az első zseb, a harmadik paraméterbe - a második zseb és így tovább - annyi paramétert lehet megadni, ahány zseb van a reguláris kifejezésben.

Az utolsó előtti paraméterbe a megtalált egyezés pozíciója kerül, az utolsóba pedig az a teljes sztring, amelyen a keresést végzik.

Hogyan működik mindez - gyakorlati példákon keresztül elemezzük.

Példa

Legyen adott egy számokat tartalmazó sztring:

let str = '2 3 4 5';

Cseréljük le ezeket a számokat a négyzeteikre. Kezdetben egyszerűen írjuk ki a számainkat egymás után a konzolra a callback függvényben:

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

A kódunk először a '2'-t írja ki, majd a '3'-at, '4'-et és '5'-öt. Azaz a match változóba egymás után bekerülnek azok a sztringek, amelyeket a reguláris kifejezés talált.

Oldjuk meg a feladatot a végéig - emeljük négyzetre a match-et és adjuk vissza a return segítségével. Így a megtalált kettesre a 4 fog visszatérni és a kettes lecserélődik erre a négyesre, a megtalált hármasra a 9 fog visszatérni és a hármas lecserélődik erre a kilencesre - és így tovább:

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // kiírja '4 9 16 25'

Példa

Legyen most a sztringben a következő formájú konstrukciók: '2+3=':

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

Tegyük úgy, hogy az egyenlőségjel után a megfelelő számok összege kerüljön. Azaz a sztringünknek a következővé kell alakulnia:

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

A feladat megoldásához ismét kísérletezzünk - bontsuk szét az első és második tagot különálló zsebekbe:

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

Most pedig oldjuk meg véglegesen a feladatot: minden egyes megtalált reszsztringre összegezzük az első és a második zseb tartalmát, vegyük a nulladik zsebet (a megtalált sztringet, például a '2+3='-t), adjuk hozzá hozzá az eredményt és adjuk vissza mindezt a return-nel:

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

Gyakorlati feladatok

Adott egy sztring:

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

Keresse meg a zárójelben álló számokat és növelje meg őket kétszeresükre. Azaz a sztringünkből a következőnek kell keletkeznie:

'aaa [4] bbb [6] ccc [24] ddd'

Adott egy sztring:

let str = '123 456 789';

Keresse meg az összes számot és fordítsa meg a számjegyeiket fordított sorrendben. Azaz a sztringünkből a következőnek kell keletkeznie:

'321 654 987'

Adott egy dátumokat tartalmazó sztring:

let str = '31.12.2025 30.11.2024 29.10.2023';

Keresse meg az összes dátumot és alakítsa át őket más formátumra úgy, hogy a következő sztring keletkezzen:

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