Callback i metoden replace i reguljära uttryck i JavaScript
Metoden replace kan ta emot inte bara en sträng som andra parameter, utan också en callback-funktion, som kommer att tillämpas för varje funnet matchning. Varje delsträng som det reguljära uttrycket hittar kommer att ersättas med vad denna funktion returnerar för just den delsträngen.
Parametrar kan skickas in i denna funktion: i den första parametern kommer den hittade strängen att läggas, i den andra parametern - den första fånggruppen, i den tredje parametern - den andra fånggruppen och så vidare - du kan göra lika många parametrar som det finns fånggrupper i det reguljära uttrycket.
I den näst sista parametern kommer positionen för den hittade matchningen att läggas, och i den sista - hela strängen som sökningen görs på.
Hur allt detta fungerar - vi kommer att gå igenom med praktiska exempel.
Exempel
Låt oss anta att vi har en sträng med siffror:
let str = '2 3 4 5';
Låt oss ersätta dessa siffror med deras kvadrater. Låt oss först bara skriva ut våra siffror i tur och ordning i konsolen i callback-funktionen:
str.replace(/\d+/g, function(match) {
console.log(match);
});
Vår kod kommer först att skriva ut '2', sedan
'3', '4' och '5'. Det vill säga
i variabeln match hamnar sekventiellt
de strängar som det reguljära uttrycket hittade.
Låt oss lösa uppgiften till slut - låt oss upphöja
match i kvadrat och returnera det med
hjälp av return. Det kommer att resultera i att för den hittade
tvåan returneras 4 och tvåan ersätts
med denna fyra, för den hittade trean returneras
9 och trean ersätts med denna nia
- och så vidare:
let result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // skriver ut '4 9 16 25'
Exempel
Låt oss nu anta att strängen innehåller konstruktioner av typen
'2+3=':
let str = '2+3= 4+5= 6+7=';
Låt oss se till att summan av motsvarande tal sätts in efter likhetstecknet. Det vill säga, vår sträng bör förvandlas till följande:
'2+3=5 4+5=9 6+7=13'
För att lösa uppgiften, låt oss experimentera igen - lägg första och andra termen i separata fånggrupper:
str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
Och låt oss nu slutgiltigt lösa uppgiften: för varje
hittad delsträng, summera den första och
andra fånggruppen, ta den nollte fånggruppen (den hittade
strängen, till exempel '2+3='), lägg till
den till resultatet och returnera allt detta 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);
Praktiska uppgifter
Given en sträng:
let str = 'aaa [2] bbb [3] ccc [12] ddd';
Hitta talen inom hakparenteser och öka dem två gånger. Det vill säga, från vår sträng bör följande erhållas:
'aaa [4] bbb [6] ccc [24] ddd'
Given en sträng:
let str = '123 456 789';
Hitta alla tal och vänd på deras siffror i omvänd ordning. Det vill säga, från vår sträng bör följande erhållas:
'321 654 987'
Given en sträng med datum:
let str = '31.12.2025 30.11.2024 29.10.2023';
Hitta alla datum och omvandla dem till ett annat format så att följande sträng erhålls:
'2025-12-31 2024-11-30 2023-10-29'