Start · Sprachen · JavaScript · Referenz · String.prototype.substr()

String.prototype.substr()

Methode

Gibt einen Teil des Strings zurück, der bei <code>start</code> beginnt und <code>length</code> Zeichen lang ist. Veraltet – besser <code>slice()</code> oder <code>substring()</code> verwenden.

seit JavaScript ES3 (in ES2015+ nur noch Annex B, veraltet) – Base deprecated seit ja Kategorie: method-property

Signatur

String.prototype.substr(start, length)

Beschreibung

Die Methode substr() schneidet einen Teilstring aus einem String heraus. Anders als slice() und substring() erwartet sie als zweites Argument keinen End-Index, sondern eine Länge, also die Anzahl der Zeichen ab start. Der ursprüngliche String wird dabei nicht verändert.

Ein negativer start-Wert wird vom Ende des Strings aus gezählt: -1 steht für das letzte Zeichen, -3 für das drittletzte. Ist length negativ, 0 oder NaN, ist das Ergebnis ein leerer String. Fehlt length oder ist es undefined, wird bis zum Ende des Strings gelesen.

Wichtig: substr() gilt als veraltet. Es steht nur im Anhang B der ECMAScript-Spezifikation („Zusätzliche Funktionen für Webbrowser“) und ist nicht Teil der Kernsprache. In neuem Code solltest du slice(start, start + length) verwenden. Diese Methode verhält sich genauso, unterstützt ebenfalls negative Indizes und ist zukunftssicher.

Parameter

Name Typ Default Beschreibung
$start Pflicht number Index des ersten Zeichens, das übernommen wird. Negative Werte zählen vom Ende (str.length + start). Ist der Wert nach der Umrechnung kleiner als 0, wird 0 verwendet. Ist er größer oder gleich str.length, ist das Ergebnis ein leerer String. NaN wird wie 0 behandelt.
$length number str.length - start Anzahl der Zeichen, die übernommen werden. Werte ≤ 0 und NaN ergeben einen leeren String. Werte über die restliche Länge hinaus werden auf das Stringende begrenzt.

Rückgabewert

Typ
string
Beschreibung
Ein neuer String mit dem ausgewählten Teil oder ein leerer String, wenn keine Zeichen ausgewählt werden.

Beispiele

Grundlagen: Start und Länge

const text = 'Programmierung';

console.log(text.substr(0, 7));   // ab Index 0, 7 Zeichen
console.log(text.substr(7));      // ab Index 7 bis zum Ende
console.log(text.substr(-5, 3));  // 5. Zeichen von hinten, 3 Zeichen
console.log(text.substr(3, 0));   // Länge 0
console.log(text.substr(3, -2));  // negative Länge
Program mierung run

Dateiendung auslesen (Legacy-Code)

const getExtension = (filename) => {
  const dot = filename.lastIndexOf('.');
  return dot === -1 ? '' : filename.substr(dot + 1);
};

console.log(getExtension('bericht.final.pdf'));
console.log(getExtension('README'));
pdf

Moderner Ersatz mit slice()

const iso = '2024-05-17T09:30:00Z';

// Alt: substr(start, länge)
const jahrAlt = iso.substr(0, 4);
const monatAlt = iso.substr(5, 2);

// Neu: slice(start, start + länge)
const jahr = iso.slice(0, 4);
const monat = iso.slice(5, 5 + 2);
const zeit = iso.slice(-9, -1); // negative Indizes funktionieren auch hier

console.log(jahrAlt === jahr, monatAlt === monat);
console.log(`${jahr}/${monat}`, zeit);
true true 2024/05 09:30:00

Unterschied zu substring() und slice()

const s = 'JavaScript';

console.log(s.substr(4, 3));     // Länge 3
console.log(s.substring(4, 3));  // Indizes werden getauscht -> (3, 4)
console.log(s.slice(4, 3));      // Ende vor Start -> leer
console.log(s.substr(-6));       // negativ = vom Ende
console.log(s.substring(-6));    // negativ wird zu 0
Scr a Script JavaScript

// Wichtig · Fallstricke

  • Veraltet: substr() steht nur in Annex B der ECMAScript-Spezifikation. Alle Browser und Node.js unterstützen die Methode zwar, andere JavaScript-Umgebungen (z. B. eingebettete Engines) müssen sie aber nicht anbieten. Linter wie ESLint (no-restricted-properties) oder die TypeScript-Bibliothek kennzeichnen sie als veraltet.
  • Verwechslungsgefahr: Das zweite Argument ist eine Länge, kein End-Index. Wer von substring() oder slice() kommt, bekommt hier leicht falsche Ergebnisse. Die direkte Umstellung lautet: str.substr(a, n) → str.slice(a, a + n). Achtung bei negativem a: Wenn a + n dabei 0 oder größer wird, verwende str.slice(a).slice(0, n).
  • Alte Internet Explorer (≤ 8): Diese Versionen haben negative start-Werte fälschlich als 0 behandelt. Für heutige Browser spielt das keine Rolle mehr, in sehr altem Legacy-Code kann es aber noch auftauchen.
  • Unicode: Wie alle String-Methoden arbeitet substr() mit UTF-16-Codeeinheiten. Emojis und andere Zeichen außerhalb der BMP können dabei in der Mitte zerschnitten werden. Das ergibt ungültige Surrogat-Hälften. Für eine sichere Zerlegung eignen sich [...str] oder Intl.Segmenter.