Co najmniej trzy sposoby:
Wyrażenie regularne:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
... który mówi „pobierz serię znaków niezawierających ukośnika” ( [^/]*
) na końcu ciągu ( $
). Następnie pobiera dopasowane znaki z zwróconego obiektu dopasowania przez indeksowanie do niego ( [0]
); w dopasowanym obiekcie pierwszym wpisem jest cały dopasowany ciąg. Nie ma potrzeby grup przechwytywania.
Przykład na żywo
Korzystanie lastIndexOf
i substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
robi to, na co wygląda: znajduje indeks ostatniego wystąpienia znaku (cóż, łańcucha) w ciągu, zwracając -1, jeśli nie zostanie znaleziony. Dziewięć razy na dziesięć prawdopodobnie chcesz sprawdzić tę zwracaną wartość ( if (n !== -1)
), ale w powyższym, ponieważ dodajemy do niej 1 i wywołujemy podciąg, w końcu robimy, str.substring(0)
co po prostu zwraca ciąg.
Za pomocą Array#split
Sudhir i Tom Walters omawiają to tutaj i tutaj , ale tylko dla kompletności:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
dzieli ciąg przy użyciu podanego separatora, zwracając tablicę.
Rozwiązanie lastIndexOf
/ substring
jest prawdopodobnie najbardziej wydajne (chociaż zawsze należy uważać, mówiąc cokolwiek o JavaScript i wydajności, ponieważ silniki różnią się tak radykalnie od siebie), ale jeśli nie robisz tego tysiące razy w pętli, nie nie ma znaczenia i będę dążyć do przejrzystości kodu.