JavaScript substring: Text per Index extrahieren
Die JavaScript-Methode substring extrahiert Zeichen zwischen zwei Indexpositionen und gibt einen neuen String zurück. Sie akzeptiert einen Startindex und optional einen Endindex (exklusiv) und nimmt alles von start bis direkt vor end. Wenn der Endindex fehlt, läuft die Extraktion bis zum Ende des Strings. Anders als slice tauscht substring seine Argumente automatisch, wenn start größer als end ist, was unbeabsichtigte leere Ergebnisse verhindert.
JavaScript-Substring-Beispiel für Textextraktion
Ausgabe:
Die Ausgabe erscheint hier...
Ausgabe:
Name: report-2024
Erweiterung: csv
So funktioniert dieses Beispiel
dateiname.lastIndexOf(".")gibt11zurück, die Position des letzten Punkts im String.dateiname.substring(0, 11)extrahiert Zeichen von Index0bis (aber ohne) Index11und erzeugt"report-2024".dateiname.substring(12)lässt das Endargument weg, daher läuft die Extraktion von Index12bis zum Ende des Strings und gibt"csv"zurück.- Beide Aufrufe liefern neue Strings. Das ursprüngliche
dateinamewird nie verändert, weil Strings in JavaScript unveränderlich sind.
Häufige Fehler mit JavaScript substring
Erwarten, dass negative Indizes vom Ende zählen.
Falsch:
"hello".substring(-3); // "hello", nicht "llo"
Richtig:
"hello".slice(-3); // "llo"
substring klemmt negative Werte auf 0, daher wird aus substring(-3) effektiv substring(0) und der gesamte String zurückgegeben. Verwende slice für endrelative Offsets.
Das zweite Argument als Länge behandeln.
Falsch:
"abcdef".substring(2, 3); // "c", nicht "cde"
Richtig:
"abcdef".substring(2, 5); // "cde"
Der zweite Parameter ist ein Endindex, keine Zeichenzahl. Diese Verwechslung kommt oft vom Legacy-substr(start, length), bei dem "abcdef".substr(2, 3) "cde" zurückgibt. Bei der Migration von substr musst du die Länge in einen Endindex umrechnen: start + length.
JavaScript substring vs slice
| Verhalten | substring(start, end) | slice(start, end) |
|---|---|---|
| Negative Argumente | Auf 0 geklemmt | Vom String-Ende gezählt |
start > end | Automatisch getauscht | Gibt leeren String "" zurück |
| Index außerhalb des Bereichs | Auf string.length geklemmt | Auf string.length geklemmt |
| Verändert das Original | Nein | Nein |
Verwende substring, wenn Indizes aus Berechnungen stammen und in falscher Reihenfolge ankommen können. Der automatische Tausch garantiert ein gültiges Ergebnis. Verwende slice, wenn negative Offsets beabsichtigt sind, etwa um mit str.slice(-N) die letzten N Zeichen zu extrahieren.
Legacy-substr durch substring ersetzen
Die Legacy-Methode substr(start, length) (oft JavaScript substr genannt) taucht in älterem Code noch häufig auf und ist in der Dokumentation als veraltet markiert. Die Verwechslung zwischen JavaScript substr und substring kommt meist von der unterschiedlichen Bedeutung des zweiten Arguments: substr erwartet eine Länge, substring erwartet einen Endindex. So migrierst du sicher:
- Ersetze
str.substr(start, length)durchstr.substring(start, start + length). - Wenn
startnegativ sein kann, wechsle stattdessen zuslice(start, start + length), dasubstringnegative Werte auf0klemmt. - Teste Randfälle, in denen
length0, negativ oder weggelassen ist, weil sichsubstrundsubstringbei diesen Eingaben unterschiedlich verhalten.
FAQ
Was ist der Unterschied zwischen JavaScript substring und slice?
Beide extrahieren einen Teil eines Strings über Indizes, unterscheiden sich aber bei Randfällen. substring klemmt negative Argumente auf 0 und tauscht start/end, wenn start größer ist. slice behandelt negative Werte als Offsets vom Ende und gibt einen leeren String zurück, wenn start größer als end ist. Für normale Vorwärts-Extraktion liefern beide identische Ergebnisse.
Ändert JavaScript substring den ursprünglichen String?
Nein. JavaScript-Strings sind unveränderlich, daher gibt jede String-Methode einen neuen String zurück. Der ursprüngliche String bleibt nach jedem substring-Aufruf unverändert. Weise das Ergebnis einer Variable zu, wenn du den extrahierten Teil behalten willst.
Was passiert, wenn start in substring größer als end ist?
substring tauscht die beiden Argumente stillschweigend. "abcdef".substring(4, 1) verhält sich wie "abcdef".substring(1, 4) und gibt "bcd" zurück. Diese Normalisierung verhindert leere Strings, wenn Index-Berechnungen vertauschte Grenzen erzeugen.