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

String.prototype.lastIndexOf()

Methode

Sucht rückwärts im String und gibt den Index des letzten Vorkommens von <code>searchString</code> zurück – oder <code>-1</code>, wenn der Teilstring nicht vorkommt.

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

String.prototype.lastIndexOf(searchString, position)

Beschreibung

lastIndexOf() ist das Gegenstück zu indexOf(): Die Methode sucht einen Teilstring, liefert aber die Position des letzten Vorkommens. Der zurückgegebene Index wird trotzdem ganz normal vom Anfang des Strings aus gezählt (beginnend bei 0).

Typische Einsatzfälle sind alle Aufgaben, bei denen das Ende eines Strings wichtig ist: die Dateiendung nach dem letzten Punkt ermitteln, den Dateinamen nach dem letzten / in einem Pfad herausziehen oder den letzten Trenner in einer Zeichenkette finden. Meist kombiniert man das Ergebnis mit slice() oder substring().

Mit dem optionalen Parameter position legt man fest, ab welchem Index rückwärts gesucht wird. Gefunden werden dann nur Vorkommen, die an einem Index <= position beginnen. Ist position größer als die Länge des Strings oder fehlt der Parameter, wird der gesamte String durchsucht. Negative Werte werden wie 0 behandelt.

Die Suche unterscheidet zwischen Groß- und Kleinschreibung und arbeitet mit UTF-16-Codeeinheiten. Wenn du nur wissen willst, ob ein Teilstring vorkommt, sind includes() oder endsWith() lesbarer.

Parameter

Name Typ Default Beschreibung
$searchString Pflicht string Der gesuchte Teilstring. Andere Werte werden in einen String umgewandelt. Achtung: Ohne Argument wird nach "undefined" gesucht.
$position number +Infinity Index, ab dem rückwärts gesucht wird. Das Vorkommen muss an diesem Index oder davor beginnen. NaN und undefined bedeuten „ganzen String durchsuchen“, negative Werte werden wie 0 behandelt.

Rückgabewert

Typ
number
Beschreibung
Der Index des letzten Vorkommens von searchString (vom Anfang des Strings aus gezählt) oder -1, wenn er nicht vorkommt. Bei einem leeren searchString ist das Ergebnis Math.min(position, str.length).

Beispiele

Grundlagen und der Parameter position

const wort = 'canal';

console.log(wort.lastIndexOf('a'));     // letztes 'a'
console.log(wort.lastIndexOf('a', 2));  // nur bis Index 2 suchen
console.log(wort.lastIndexOf('a', 0));  // nur Index 0 prüfen
console.log(wort.lastIndexOf('x'));     // nicht vorhanden
console.log(wort.lastIndexOf('c', -5)); // negativ → wie 0
console.log(wort.lastIndexOf(''));      // leerer String → Länge
3 1 -1 -1 0 5

Dateiendung und Dateinamen ermitteln

const getExtension = (dateiname) => {
  const punkt = dateiname.lastIndexOf('.');
  // kein Punkt oder versteckte Datei wie ".bashrc" → keine Endung
  return punkt > 0 ? dateiname.slice(punkt + 1) : '';
};

const getBasename = (pfad) => pfad.slice(pfad.lastIndexOf('/') + 1);

console.log(getExtension('archiv.tar.gz'));
console.log(getExtension('.bashrc'));
console.log(getBasename('/home/user/docs/bericht.pdf'));
console.log(getBasename('readme.md')); // kein '/' → -1 + 1 = 0
gz bericht.pdf readme.md

Alle Vorkommen rückwärts finden

const findAllFromEnd = (text, begriff) => {
  const treffer = [];
  let pos = text.lastIndexOf(begriff);
  while (pos !== -1) {
    treffer.push(pos);
    if (pos === 0) break; // wichtig: sonst Endlosschleife!
    pos = text.lastIndexOf(begriff, pos - 1);
  }
  return treffer;
};

console.log(findAllFromEnd('abcabcabc', 'abc'));
[ 6, 3, 0 ]

Suche ohne Beachtung der Groß-/Kleinschreibung

const satz = 'JavaScript ist toll. Ich mag javascript.';

console.log(satz.lastIndexOf('JavaScript'));
console.log(satz.toLowerCase().lastIndexOf('javascript'));
0 29

// Wichtig · Fallstricke

  • Groß-/Kleinschreibung: Die Suche unterscheidet immer zwischen Groß- und Kleinbuchstaben. Für eine Suche ohne diesen Unterschied beide Seiten vorher mit toLowerCase() umwandeln.
  • Endlosschleife: Negative Werte für position werden wie 0 behandelt. str.lastIndexOf(x, pos - 1) mit pos === 0 findet also denselben Treffer bei Index 0 immer wieder. Diesen Fall in Schleifen gesondert abbrechen.
  • Auf -1 prüfen: if (str.lastIndexOf(x)) ist ein häufiger Fehler, denn ein Treffer bei Index 0 ist falsy und -1 ist truthy. Deshalb immer explizit mit !== -1 vergleichen oder gleich includes() bzw. endsWith() verwenden.
  • position betrifft den Anfang des Treffers: 'abcabc'.lastIndexOf('bc', 4) ergibt 4, obwohl der Treffer über Index 4 hinausgeht.
  • Keine regulären Ausdrücke: searchString wird immer als einfacher Text behandelt. Für Muster search() oder matchAll() verwenden.
  • Unicode: Die Indizes zählen UTF-16-Codeeinheiten. Emojis und andere Zeichen außerhalb der BMP belegen jeweils zwei Positionen.
  • Die Methode ist in allen Browsern und in Node.js verfügbar.