Uzyskaj wartość ciągu po ukośniku w JavaScript

112

Próbuję już od ponad godziny i nie mogę znaleźć właściwego sposobu, aby to zrobić, chociaż prawdopodobnie jest to dość łatwe:

Mam coś takiego: foo/bar/test.html

Chciałbym użyć jQuery do wyodrębnienia wszystkiego po ostatnim /. W powyższym przykładzie wynikiem będzie test.html.

Myślę, że można to zrobić za pomocą substri indexOf(), ale nie mogę znaleźć działającego rozwiązania.

r0skar
źródło

Odpowiedzi:

243

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 lastIndexOfi substring:

var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);

lastIndexOfrobi 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/ substringjest 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.

TJ Crowder
źródło
1
Jak dostosowałbyś to, aby zwrócić ciąg przed ostatnim ukośnikiem? (Tj.
Zwróć
28

Nie potrzebujesz jQuery, a jest na to kilka sposobów, na przykład:

var parts = myString.split('/');
var answer = parts[parts.length - 1];

Gdzie myString zawiera Twój ciąg.

Tom Walters
źródło
3
+1 (do pracy) wskazując, że jQuery nie jest ostatecznym rozwiązaniem problemów javascript.
Andrew Jackman
1
To jest błędne rozwiązanie, spróbuj co się stanie, jeśli dodasz ukośnik do ślimaka? Zwraca 0. A co się dzieje, że nie ma ślimaka? - zwraca NaN! wtf? zły kod
Donatas Cereska
1) Pytanie dotyczyło danych wejściowych, które nie były zerowe 2) Dane wejściowe dotyczyły danych wejściowych zakończonych nazwami plików (bez ukośników) 3) Przyjęta odpowiedź jest rzeczywiście znacznie lepszym rozwiązaniem, stąd liczne głosy w górę 4) Zapraszamy do dodania własnego rozwiązania
Tom Walters,
12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));
kasdega
źródło
9

Próbować;

var str = "foo / bar / test.html";
var tmp = str.split ("/");
alert (tmp.pop ());
Sudhir Bastakoti
źródło
5

Kiedy wiem, że sznurek będzie w miarę krótki, używam następującej jednej wkładki ... (pamiętaj, aby uniknąć odwrotnych ukośników)

// if str is C:\windows\file system\path\picture name.jpg
alert( str.split('\\').pop() );

pojawi się alert z picture name.jpg

DaveAlger
źródło
2
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

path.substring(pos, path.length()-pos) ;

Teraz masz last.htm w ciągu ścieżki.

Zar E Ahmer
źródło
1

lekka waga

string.substring(start,end)

gdzie

start = Required. Miejsce rozpoczęcia ekstrakcji. Pierwszy znak znajduje się pod indeksem 0`.

end = Optional. Pozycja (do, ale nie włącznie), w której należy zakończyć ekstrakcję. Jeśli pominięty, wyodrębnia resztę ciągu.

    var string = "var1/var2/var3";

    start   = string.lastIndexOf('/');  //console.log(start); o/p:- 9
    end     = string.length;            //console.log(end);   o/p:- 14

    var string_before_last_slash = string.substring(0, start);
    console.log(string_before_last_slash);//o/p:- var1/var2

    var string_after_last_slash = string.substring(start+1, end);
    console.log(string_after_last_slash);//o/p:- var3

LUB

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3
Shailesh Sonare
źródło
1

JQuery:

var afterDot = value.substr(value.lastIndexOf('_') + 1);

JavaScript:

var myString = 'asd/f/df/xc/asd/test.jpg'
var parts    = myString.split('/');
var answer   = parts[parts.length - 1];
console.log(answer);

Zastąp „_” || „/” do własnych potrzeb

SMPLYJR
źródło
1

Zgodnie z wymaganiami w pytaniu:

var string1= "foo/bar/test.html";
  if(string1.contains("/"))
  {
      var string_parts = string1.split("/");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }  

oraz w przypadku pytania zadanego z adresu URL (zadanego przy jednokrotnym wystąpieniu „=”) ::
[ http://stackoverflow.com/questions/24156535/how-to-split-a-string-after-a-particular-character-in -jquery] [1]

var string1= "Hello how are =you";
  if(string1.contains("="))
  {
      var string_parts = string1.split("=");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }
Vishal Kumar
źródło
0

Spróbuj tego:

const url = "files/images/gallery/image.jpg";

console.log(url.split("/").pop());

Patrycja Petryk
źródło
To rozwiązanie jest już w zaakceptowanej odpowiedzi, jako trzecie możliwe rozwiązanie
β.εηοιτ.βε