⊗jsSpRERMC 127 of 294 menu

Callback i replace-metoden med regulære udtryk i JavaScript

Replace-metoden kan som anden parameter tage ikke kun en streng, men også en callback-funktion, som vil blive anvendt for hvert fundet tilfælde. Hver delstreng, som det regulære udtryk finder, vil blive erstattet af det, som denne funktion returnerer for netop denne delstreng.

Til denne funktion kan parametre sendes: den første parameter vil indeholde den fundne streng, den anden parameter - den første capturing group, den tredje parameter - den anden capturing group og så videre - man kan oprette lige så mange parametre, som der er capturing groups i det regulære udtryk.

I den næstsidste parameter vil positionen for det fundne tilfælde blive placeret, og i den sidste - hele strengen, som der søges i.

Hvordan alt dette fungerer - vil vi gennemgå med praktiske eksempler.

Eksempel

Lad der være givet en streng med tal:

let str = '2 3 4 5';

Lad os erstatte disse tal med deres kvadrater. Lad os til at starte med bare udskrive vores tal en efter en i konsollen i callback-funktionen:

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

Vores kode vil først udskrive '2', derefter '3', '4' og '5'. Det vil sige at i variablen match kommer der successivt de strenge, som det regulære udtryk fandt.

Lad os løse opgaven til ende - vi vil opløfte match til anden potens og returnere det med return. Det vil resultere i, at for den fundne toer returneres 4 og toeren erstattes med denne firer, for den fundne treer returneres 9 og treeren erstattes med denne nier - og så videre:

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

Eksempel

Lad der nu i strengen være givet konstruktioner af typen '2+3=':

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

Lad os gøre således, at der efter lighedstegnet indsættes summen af de tilsvarende tal. Det vil sige, at vores streng skal blive til følgende:

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

For at løse opgaven, lad os eksperimentere igen - lad os opdele det første og andet led i separate capturing groups:

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

Og lad os nu endeligt løse opgaven: for hver fundet delstreng lægger vi den første og anden capturing group sammen, tager den nulte capturing group (den fundne streng, for eksempel '2+3='), tilføjer den til resultatet og returnerer alt dette via return:

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

Praktiske opgaver

Given følgende streng:

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

Find tallene i parenteser og forøg dem med det dobbelte. Det vil sige, at vores streng skal blive til følgende:

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

Given følgende streng:

let str = '123 456 789';

Find alle tallene og vend deres cifre om i omvendt rækkefølge. Det vil sige, at vores streng skal blive til følgende:

'321 654 987'

Given en streng med datoer:

let str = '31.12.2025 30.11.2024 29.10.2023';

Find alle datoer og omdann dem til et andet format, således at der opnås følgende streng:

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