Direkt zum Hauptinhalt springen
eLearner.app
Modul 7 · Lektion 3 von 427/32 im Kurs~12 min
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.

JS
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% MwSt.)

Callback-Argumente

JS
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).
JS
'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

Übung#regex.m7.l3.e1
Versuche: 0Wird geladen…

Finde jede ganze Zahl im Text. (In replace würdest du `(m) => Number(m) * 2` übergeben, um sie zu verdoppeln.)

Editor wird geladen…
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

Übung#regex.m7.l3.e2
Versuche: 0Wird geladen…

Finde jede E-Mail (vereinfachte Form: Buchstaben/Ziffern/Punkte/Unterstriche @ Domain). Auf diese Weise könnte ein Callback sie zu `***@domain` zensieren.

Editor wird geladen…
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

Übung#regex.m7.l3.e3
Versuche: 0Wird geladen…

Finde jedes aus Buchstaben bestehende Wort im Text, sodass es über einen Callback in Großbuchstaben umgewandelt werden kann.

Editor wird geladen…
Hinweis anzeigen

Finde einfache Buchstaben mit [a-zA-Z]+.

Lösung nach 3 Versuchen verfügbar