Lektionen des Moduls (3/4)
Ersetzung mit Callback
Wenn ein Ersetzungs-String nicht ausreicht, übergib eine Funktion:
str.replace(regex, (match, ...groups) => string). Der Callback wird für jeden Treffer aufgerufen und sein Rückgabewert wird als Ersetzung verwendet.
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% MwSt.)Callback-Argumente
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);match-- der gesamte Treffer.p1,p2, … -- die erfassten Gruppen in ihrer Reihenfolge.offset-- Index des Treffers im Original-String.original-- der gesamte String.groups-- Objekt mit den benannten Gruppen (falls vorhanden).
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"Der Callback verleiht dir unbegrenzte Möglichkeiten: Parsen, Lookup, Konvertierung, HTML-Escaping… alles, was ein statischer String nicht leisten kann.
Fortgeschrittene Argumente in Replace-Callbacks
Die Callback-Funktion erhält mehrere Argumente: den vollständigen Treffer, jede erfasste Gruppe, den Offset des Treffers im gesamten Text und den ursprünglichen Eingabestring. Dies ermöglicht eine anspruchsvolle, kontextbasierte Transformationslogik.
Probiere es aus
Finde jede ganze Zahl im Text. (In replace würdest du `(m) => Number(m) * 2` übergeben, um sie zu verdoppeln.)
Hinweis anzeigen
Verwende \d+ (eine oder mehrere Ziffern), um jede ganze Zahl als einzelnen Treffer zu erfassen.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Finde jede E-Mail (vereinfachte Form: Buchstaben/Ziffern/Punkte/Unterstriche @ Domain). Auf diese Weise könnte ein Callback sie zu `***@domain` zensieren.
Hinweis anzeigen
Erweitere die Klasse auf [\w.]+ , um Punkte im Benutzernamen und in der Domain zu akzeptieren.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Finde jedes aus Buchstaben bestehende Wort im Text, sodass es über einen Callback in Großbuchstaben umgewandelt werden kann.
Hinweis anzeigen
Finde einfache Buchstaben mit [a-zA-Z]+.
Lösung nach 3 Versuchen verfügbar