Skip to main content

Find & Replace

Find and replace text with regex support and case-sensitive options.

Geprüft von · Zuletzt geprüft

So verwendest du das Suchen-und-Ersetzen-Werkzeug

  1. Füge deinen Quelltext in den großen Eingabebereich ein. Jede Größe bis zu mehreren Megabyte wird ohne Server-Roundtrip verarbeitet.
  2. Tippe ein, was du finden möchtest im Suchen-Feld. Für buchstäblichen Text ist das einfach der Ausdruck; für Musterabgleich zuerst den Regex-Modus aktivieren.
  3. Tippe die Ersetzung im Ersetzen-Feld. Du kannst $1, $2, $<name>, $& und ähnliche verwenden, wenn der Regex-Modus aktiv ist.
  4. Optionen umschalten je nach Absicht: Groß-/Kleinschreibung macht den Abgleich zu einem exakten Zeichenvergleich, Ganzes Wort fügt Wortgrenzen-Anker hinzu, Regex-Modus interpretiert das Suchen-Feld als JavaScript-Regulärausdruck.
  5. Klicke auf Alle ersetzen. Das Ergebnisfenster wird darunter zusammen mit einer Anzahl der durchgeführten Ersetzungen angezeigt.
  6. Kopiere das Ergebnis mit der Kopieren-Schaltfläche, oder iteriere, indem du die Suchen- oder Ersetzen-Felder anpasst und erneut Alle ersetzen gegen die aktualisierte Eingabe klickst.

Was das Werkzeug im Hintergrund macht

Im buchstäblichen Modus wird die Suchen-Zeichenkette mit einem Helfer escaped, der jeden Regex-Metazeichen (.\+*?[](){}^$|) mit einem Backslash voranstellt, dann in ein RegExp mit dem g-Flag kompiliert - optional i für groß-/kleinschreibungsinsensitiv - und an String.prototype.replaceAll (oder replace mit dem globalen Flag auf älteren Browsern) übergeben. Ganzes-Wort-Modus umschließt die escapte Zeichenkette in \b...\b-Ankern. Regex-Modus überspringt den Escape-Schritt vollständig und kompiliert das Suchen-Feld so wie es ist, sodass du vollen Zugang zu Alternation, Erfassungsgruppen, Lookarounds und Unicode-Eigenschafts-Escapes hast. Die Ersetzungszeichenkette wird durch JavaScripts eingebaute replace-Semantik verarbeitet, was bedeutet, dass $1 bis $99 auf nummerierte Erfassungsgruppen verweisen, $<name> auf benannte Gruppen, $& auf den ganzen Match, und $$ auf ein buchstäbliches Dollarzeichen escaped. Kein Text verlässt jemals den Tab.

Wann du es verwenden würdest

  • Umbenennen einer Funktion oder Variable in einem Code-Snippet, das du aus einer größeren Datei zur Überprüfung herausgezogen hast.
  • Korrigieren eines Marken-Großschreibungsfehlers in einem Blogbeitrag, der den Namen dutzendweise zitiert.
  • Schnelles Konvertieren von Markdown zu HTML-ähnlichem: **fett** in <b>$1</b> umwandeln mit Regex \*\*(.+?)\*\*.
  • Neuformatieren von CSV-ähnlichen Daten durch Ersetzen von Kommas durch Tabs oder Austauschen der Spaltenreihenfolge über Erfassungsgruppen-Neuanordnung.
  • Schwärzen von personenbezogenen Daten, bevor eine Log-Datei geteilt wird: Regex-Ersetzen /\d{3}-\d{2}-\d{4}/g durch XXX-XX-XXXX.
  • Bereinigen von Übersetzungsdateien, bei denen jedes Vorkommen eines Legacy-Produktnamens zum neuen werden muss, aber nur wenn es als ganzes Wort erscheint.

Häufige Fallstricke und Randfälle

  • Buchstäbliche Dollarzeichen. Im Ersetzungstext ist $ speziell. Um ein buchstäbliches $ einzufügen, $$ verwenden. Das Einfügen von Code mit Preisformatierung durch Ersetzung erwischt das oft.
  • Nicht-escapte Regex-Metazeichen im buchstäblichen Modus. Das Werkzeug escaped sie für dich, aber wenn du mitten in einer Sitzung ohne Nachdenken in den Regex-Modus wechselst, bedeutet eine Klammer plötzlich eine Erfassungsgruppe statt einer buchstäblichen Klammer.
  • Gierige vs. faule Quantoren. <.+> gegen <a>...</a> erfasst die ganze Zeile, weil .+ gierig ist; <.+?> für das erwartete Pro-Tag-Verhalten verwenden.
  • Ganzes Wort auf Nicht-Lateinischen Schriften. \b ist ASCII-zentriert - es findet Grenzen zwischen Wortzeichen ([A-Za-z0-9_]) und Nicht-Wortzeichen. Für CJK- oder arabischen Text sind Wortgrenzen nicht klar definiert und die Option kann überraschend verhalten.
  • Mehrzeilige Matches. Der Punkt stimmt nicht mit Zeilenumbrüchen überein, es sei denn, du aktivierst dotAll über (?s) in neueren Engines oder das s-Flag im Regex-Modus. Ein Muster wie foo.*bar stimmt ohne es nicht über Zeilenumbrüche überein.
  • Katastrophales Backtracking. Verschachtelte Quantoren wie (a+)+ auf langen nicht-matchenden Eingaben können den Tab einfrieren. Wenn Alle ersetzen hängt, ist dein Regex der Schuldige.

Hintergrund zur Regex-Ersetzung

JavaScripts replace-Methode wurde in ECMA-262 im Jahr 1997 standardisiert und hat sich seitdem kaum verändert. Die Ersetzungszeichenketten-Syntax - $n für Gruppen, $& für Match, $' und $` für Suffix und Präfix - lässt sich auf Perl 4 zurückführen. sed verwendet \1 bis \9 für denselben Zweck, weshalb das Portieren eines Regex zwischen Shell und JavaScript oft das Anpassen von Rückwärtsreferenzen erfordert. Benannte Erfassungsgruppen sind eine moderne Ergänzung (ES2018), die Muster selbstdokumentierend machen: (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) durch $<day>/$<month>/$<year> ersetzt ordnet Daten ohne Mehrdeutigkeit neu an. PCRE unterstützt \g<name> und (?P=name) für ähnliche Effekte; Pythons re-Modul verwendet \g<name>.

Vergleich mit Alternativen

sed -E 's/foo/bar/g' datei ist das Unix-Arbeitstier für dieselbe Aufgabe - schnell, skriptfähig und POSIX-Standard, obwohl seds Regex-Dialekt subtil von JavaScripts abweicht (keine Lookaheads im Basic-Modus, andere Rückwärtsreferenz-Syntax). perl -pe gibt vollständiges Perl-Regex und Inline-Bearbeitung und ist das, wonach viele Bash-Skripts tatsächlich greifen, wenn seds ERE-Modus nicht ausreicht. Das Find-in-Files deiner IDE ist normalerweise das richtige Werkzeug für dateienübergreifende Ersetzung, weil es eine Vorschau zeigt und Rückgängig bietet. ripgrep --replace und sd sind schnelle Rust-basierte Ersetzungen für sed auf modernen Systemen. Dieses Web-Werkzeug für eine einzelne Snippet-, Einmal-Änderung verwenden, wo du sofortiges visuelles Feedback, Erfassungsgruppen-Playground-Semantik und zero Installation möchtest - besonders praktisch auf einem Chromebook, einem Telefon oder einem gesperrten Unternehmensrechner.

Häufig gestellte Fragen

Was ist der genaue Regex-Dialekt?

ECMAScript, wie in ECMA-262 definiert. Das bedeutet JavaScript-Flavour- Regex: \w ist [A-Za-z0-9_], Punkt stimmt standardmäßig nicht mit Zeilenumbrüchen überein, benannte Gruppen verwenden (?&lt;name&gt;...), und das u-Flag schaltet Unicode-Eigenschafts-Escapes wie \p{Letter} frei. Es unterscheidet sich von PCRE an mehreren Stellen: keine possessiven Quantoren, keine atomaren Gruppen, keine Inline-Modifikatoren (?i) und keine Regex-Rekursion. In PHP oder Python gültige Muster müssen möglicherweise angepasst werden; in Node.js oder deinem Browser-Code gültige Muster funktionieren hier unverändert.

Wie füge ich ein buchstäbliches Dollarzeichen in der Ersetzung ein?

Gib $$ ein, und die Engine fügt ein einzelnes $ in die Ausgabe ein. Das erste $ ist ein Escape-Zeichen in der ECMAScript-Ersetzungssyntax, sodass $5.00 versuchen würde, die Erfassungsgruppe 5 zu referenzieren, die normalerweise nicht existiert und in einigen Engines zu einem buchstäblichen $5.00 oder einem leeren Match führt. $$5.00 zu verwenden ist eindeutig und überall korrekt.

Verarbeitet das Werkzeug meinen Text auf einem Server?

Nein. Die Ersetzungsoperation ist ein synchroner JavaScript-Aufruf, der innerhalb der Seite läuft. Kein fetch, kein Worker, kein Analytics-Beacon mit dem Text. Der RegExp-Konstruktor und die String.replaceAll-Methode sind beide nativ für deine Browser-Engine - V8, SpiderMonkey oder JavaScriptCore - und haben keine Netzwerkabhängigkeiten. Du kannst dies überprüfen, indem du das Netzwerkfenster in den DevTools beobachtest, während du auf Alle ersetzen klickst.

Warum stimmt "Ganzes Wort" nicht mit meinem CJK-Text überein?

Weil \b - der Wortgrenzen-Anker in ECMAScript - als Position zwischen einem \w-Zeichen und einem Nicht-\w-Zeichen definiert ist, wobei \w streng [A-Za-z0-9_] ist. Japanisch, Chinesisch, Koreanisch, Arabisch, Thai und die meisten anderen Schriften als Lateinisch oder Kyrillisch nehmen nicht an \w teil, sodass es keine Grenze gibt, an der man verankern kann. Für CJK-Segmentierung brauchst du einen ordentlichen Tokenizer (Intl.Segmenter in modernen Browsern, oder eine wörterbuchbasierte Bibliothek wie kuromoji).

Kann ich eine mehrzeilige Erfassungsgruppe-Ersetzung durchführen?

Ja. Regex-Modus aktivieren, das Muster über die mehrzeilige Grenze mit explizitem \n oder dem s-Flag schreiben, damit Punkt Zeilenumbrüche abgleicht, und Erfassungsgruppen wie gewohnt verwenden. Zum Beispiel HTML in Markdown-ähnliche Listen konvertieren: &lt;li&gt;([\s\S]+?)&lt;/li&gt; mit Ersetzung - $1 funktioniert. Beachte, dass [\s\S] das klassische Idiom für "jedes Zeichen einschließlich Zeilenumbruch" ist, das vor dem s-Flag existierte und weiterhin überall funktioniert.

Was passiert, wenn mein Regex ungültig ist?

Der RegExp-Konstruktor wirft einen SyntaxError mit einer beschreibenden Nachricht ("Nicht abgeschlossene Gruppe", "Ungültiges Escape" usw.). Das Werkzeug fängt ihn ab, zeigt den Fehler neben dem Suchen-Feld an und lässt die Eingabe unverändert. Das Muster korrigieren und erneut auf Alle ersetzen klicken. Da es kein stilles Versagen gibt, musst du nicht fragen, ob ein defektes Regex deine Eingabe gelöscht hat.

Verarbeitet das sehr große Eingaben?

Eingaben bis zu mehreren Megabyte Text sind in Ordnung; der Engpass ist die Textarea-Benutzeroberfläche statt der Regex-Engine. Einmal über etwa 10 MB beginnen Browser zu kämpfen um zu rendern, und Regex-Operationen mit hochkomplexen Mustern können Sekunden dauern oder den Tab mit katastrophalem Backtracking zum Einfrieren bringen. Für log-dateigroße Eingaben sed, perl oder ripgrep --replace im Terminal verwenden.

Wie kann ich Änderungen vor dem Übernehmen in der Vorschau sehen?

Das Werkzeug hat keinen separaten Vorschau-Modus - das Ausgabefenster ist die Vorschau, und die ursprüngliche Eingabe bleibt im Suchen-Bereich unverändert, bis du kopierst. Wenn du Vorher und Nachher vergleichen möchtest, füge das Ergebnis in das Diff-Prüfer-Werkzeug auf dieser Site ein und vergleiche es mit dem Original. Das ist oft informativer als eine numerische Ersetzungsanzahl.

Gibt es eine Rückgängig-Funktion?

Das Werkzeug selbst führt keine Geschichte, aber Alle ersetzen ist nicht-destruktiv: Es liest die Eingabe und schreibt das Ergebnis in ein separates Ausgabefenster, wobei der Quelltext im Eingabe-Textarea intakt bleibt. Du kannst Optionen wechseln und Alle ersetzen wiederholt gegen dieselbe Quelle klicken, ohne sie zu verlieren. Wenn du die Ausgabe in die Quelle zurückeinfügst, funktioniert Ctrl+Z deines Browsers normalerweise innerhalb des Textareas, um rückwärts zu schrittweise.

Kann ich Unicode-Kategorien wie nur-Buchstaben verwenden?

Ja. Im Regex-Modus das u-Flag setzen und \p{L} für jeden Buchstaben, \p{N} für jede Zahl, \p{Punctuation} für Interpunktion usw. verwenden, wie im Unicode Standard Annex #44 definiert. Zum Beispiel alle Nicht-Buchstaben aus einer Zeile entfernen: /[^\p{L}\s]/gu durch eine leere Zeichenkette ersetzen. Das ist der moderne, portable Weg, kulturell bewusste Muster zu schreiben.

Mehr Text Tools