Suchen und Ersetzen mit Regex — Texte effizient bearbeiten
Suchen-und-Ersetzen ist eine der mächtigsten Anwendungen regulärer Ausdrücke. Während eine einfache Textsuche nur exakte Übereinstimmungen findet, kann Regex-basiertes Suchen und Ersetzen Muster finden, Teile extrahieren und intelligent neu zusammensetzen. Dieser Artikel zeigt, wie man Regex für komplexe Suchen-und-Ersetzen-Aufgaben in Editoren, JavaScript und anderen Umgebungen einsetzt — mit dem WikiPlus Regex-Tester zum sofortigen Ausprobieren.
Regex-Suche in Code-Editoren: VS Code, Sublime und mehr
Die meisten modernen Code-Editoren unterstützen reguläre Ausdrücke in der Suchen-und-Ersetzen-Funktion. In VS Code aktiviert man Regex-Suche mit dem kleinen .* -Icon oder dem Shortcut Alt+R (Windows/Linux) bzw. Alt+Cmd+R (Mac). Dann kann man komplexe Muster eingeben und im Ersetzen-Feld auf Capture Groups referenzieren. Beispiel: Man möchte alle Vorkommen von console.log("text") durch logger.debug("text") ersetzen. Suchfeld: console\.log\("(.+?)"\) — der Punkt muss escaped werden, die Klammern sind Capture Groups. Ersetzen-Feld: logger.debug("$1") — $1 referenziert den Inhalt der ersten Capture Group. Der WikiPlus Regex-Tester eignet sich hervorragend, um solche Muster vor der Verwendung im Editor zu entwickeln und zu testen.
String.replace() mit Regex in JavaScript
In JavaScript ermöglicht String.prototype.replace() und String.prototype.replaceAll() die Kombination von Regex-Suche mit Ersetzungslogik. Einfaches Ersetzen: 'Hallo Welt'.replace(/Welt/, 'JavaScript') ergibt 'Hallo JavaScript'. Mit Capture Groups: 'Hans Müller'.replace(/(\w+) (\w+)/, '$2, $1') ergibt 'Müller, Hans' — nützlich für die Umformatierung von Namen. Mit Callback-Funktion: str.replace(/\d+/g, match => parseInt(match) * 2) verdoppelt alle Zahlen im String. Das g-Flag ist wichtig: Ohne es wird nur der erste Treffer ersetzt, mit g alle. Für Operationen, die den gesamten Match als Kontext brauchen, ist die Callback-Funktion besonders mächtig — man hat Zugriff auf den gesamten Match, alle Capture Groups, den Offset und den Original-String.
Datentransformation mit Regex: Praktische Beispiele
Regex-basiertes Suchen und Ersetzen glänzt bei Datentransformationsaufgaben. Datum umformatieren von YYYY-MM-DD zu DD.MM.YYYY: Suchen: (\d{4})-(\d{2})-(\d{2}), Ersetzen: $3.$2.$1. HTML-Tags entfernen: Suchen: <[^>]+>, Ersetzen: (leerer String). Telefonnummern normalisieren: Verschiedene Formate wie +49 (0) 123-456 78, 0123/45678 oder 0123 456 78 auf Ziffernfolge reduzieren: Suchen: [^\d+], Ersetzen: (leerer String). Markdown-Fettschrift zu HTML: Suchen: \*\*(.+?)\*\*, Ersetzen: <strong>$1</strong>. Diese Transformationen lassen sich alle vorab im WikiPlus Regex-Tester entwickeln und auf Korrektheit prüfen, bevor man sie in produktivem Code einsetzt.
Greedy vs. Lazy Quantoren beim Ersetzen
Ein häufiges Problem beim Regex-Ersetzen ist das Verhalten von gierigen (greedy) Quantoren. Das Muster <.+> soll HTML-Tags finden, aber in '<b>Text</b>' trifft es den gesamten String '<b>Text</b>', nicht nur '<b>' und '</b>' einzeln — weil + gierig ist und so viel wie möglich erfasst. Die Lösung ist der Lazy-Quantor +?: <.+?> trifft nur das kleinstmögliche Match und findet die Tags einzeln. Diese Unterscheidung ist beim Entwickeln von Ersetzen-Mustern für HTML, XML oder ähnliche verschachtelte Strukturen entscheidend. Der WikiPlus Regex-Tester hebt Treffer visuell hervor und macht sofort sichtbar, ob ein Quantor greedy oder lazy matcht.
Häufig gestellte Fragen
- Wie ersetze ich mit Regex in mehreren Dateien gleichzeitig?
- Für Multi-File-Suchen-und-Ersetzen eignen sich sed (Linux/Mac) oder PowerShell-Cmdlets (Windows) für Skript-Ansätze, oder die Projektweite Suche in VS Code. Das Regex-Muster kann zuvor im WikiPlus Regex-Tester entwickelt und validiert werden.
- Können Regex-Ersetzen-Operationen rückgängig gemacht werden?
- In Code-Editoren ja, mit Strg+Z. In Skripten ist es wichtig, vor der Ausführung ein Backup zu erstellen. Bei JavaScript-String-Operationen im Code gibt es kein automatisches Rückgängigmachen — die Ursprungsdaten sollten bewahrt werden.
- Wie matche ich Zeilenumbrüche in einem Regex-Muster?
- Mit dem s-Flag (dotAll) trifft der Punkt auch Zeilenumbrüche. Alternativ kann man [\s\S]+ verwenden, das Whitespace und Nicht-Whitespace und damit alle Zeichen einschließlich Newlines erfasst. Im Multiline-Modus (m-Flag) ändern sich die Bedeutungen von ^ und $.