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

  1. dateiname.lastIndexOf(".") gibt 11 zurück, die Position des letzten Punkts im String.
  2. dateiname.substring(0, 11) extrahiert Zeichen von Index 0 bis (aber ohne) Index 11 und erzeugt "report-2024".
  3. dateiname.substring(12) lässt das Endargument weg, daher läuft die Extraktion von Index 12 bis zum Ende des Strings und gibt "csv" zurück.
  4. Beide Aufrufe liefern neue Strings. Das ursprüngliche dateiname wird 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

Verhaltensubstring(start, end)slice(start, end)
Negative ArgumenteAuf 0 geklemmtVom String-Ende gezählt
start > endAutomatisch getauschtGibt leeren String "" zurück
Index außerhalb des BereichsAuf string.length geklemmtAuf string.length geklemmt
Verändert das OriginalNeinNein

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:

  1. Ersetze str.substr(start, length) durch str.substring(start, start + length).
  2. Wenn start negativ sein kann, wechsle stattdessen zu slice(start, start + length), da substring negative Werte auf 0 klemmt.
  3. Teste Randfälle, in denen length 0, negativ oder weggelassen ist, weil sich substr und substring bei 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.