Callback in der replace-Methode in JavaScript-Regulären Ausdrücken
Die replace-Methode kann als zweiten Parameter nicht nur einen String, sondern auch eine Callback-Funktion entgegennehmen, die für jedes gefundene Vorkommen angewendet wird. Jede Teilzeichenkette, die der reguläre Ausdruck findet, wird durch das ersetzt, was diese Funktion speziell für diese Teilzeichenkette zurückgibt.
An diese Funktion können Parameter übergeben werden: in den ersten Parameter kommt der gefundene String, in den zweiten Parameter - die erste Erfassungsgruppe, in den dritten Parameter - die zweite Erfassungsgruppe und so weiter - es können soviele Parameter gemacht werden, wie Erfassungsgruppen im regulären Ausdruck vorhanden sind.
In den vorletzten Parameter kommt die Position des gefundenen Vorkommens, und in den letzten - der gesamte String, in dem gesucht wird.
Wie das alles funktioniert - werden wir an praktischen Beispielen durchgehen.
Beispiel
Gegeben sei ein String mit Zahlen:
let str = '2 3 4 5';
Lassen Sie uns diese Zahlen durch ihre Quadrate ersetzen. Lassen Sie uns zunächst einfach unsere Zahlen nacheinander in der Callback-Funktion in der Konsole ausgeben:
str.replace(/\d+/g, function(match) {
console.log(match);
});
Unser Code gibt zuerst '2' aus, dann
'3', '4' und '5'. Das bedeutet,
in die Variable match gelangen nacheinander
die Strings, die der reguläre Ausdruck gefunden hat.
Lassen Sie uns die Aufgabe zu Ende lösen - wir quadrieren
match und geben es mit
return zurück. Das Ergebnis ist, dass für die gefundene
Zwei 4 zurückgegeben wird und die Zwei durch
diese Vier ersetzt wird, für die gefundene Drei wird
9 zurückgegeben und die Drei wird durch diese Neun
ersetzt - und so weiter:
let result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // gibt '4 9 16 25' aus
Beispiel
Nehmen wir nun an, der String enthält Konstrukte der Form
'2+3=':
let str = '2+3= 4+5= 6+7=';
Lassen Sie uns bewirken, dass nach dem Gleichheitszeichen die Summen der entsprechenden Zahlen eingefügt werden. Das bedeutet, unser String sollte sich wie folgt verwandeln:
'2+3=5 4+5=9 6+7=13'
Um die Aufgabe zu lösen, experimentieren wir wieder - wir teilen den ersten und den zweiten Summanden auf separate Erfassungsgruppen auf:
str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
Und nun lösen wir die Aufgabe endgültig: für jede
gefundene Teilzeichenkette summieren wir die erste und
zweite Erfassungsgruppe, nehmen die nullte Erfassungsgruppe (den gefundenen
String, z.B. '2+3='), fügen
ihn dem Ergebnis hinzu und geben all das via return zurück:
let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
let sum = Number(match1) + Number(match2);
return match0 + sum;
});
console.log(result);
Praktische Aufgaben
Gegeben sei der String:
let str = 'aaa [2] bbb [3] ccc [12] ddd';
Finden Sie die Zahlen in den Klammern und verdoppeln Sie sie. Das bedeutet, aus unserem String sollte folgender werden:
'aaa [4] bbb [6] ccc [24] ddd'
Gegeben sei der String:
let str = '123 456 789';
Finden Sie alle Zahlen und drehen Sie ihre Ziffern in umgekehrter Reihenfolge um. Das bedeutet, aus unserem String sollte folgender werden:
'321 654 987'
Gegeben sei ein String mit Daten:
let str = '31.12.2025 30.11.2024 29.10.2023';
Finden Sie alle Daten und konvertieren Sie sie in ein anderes Format, so dass der folgende String entsteht:
'2025-12-31 2024-11-30 2023-10-29'