Dapatkan nilai string setelah garis miring di JavaScript

112

Saya sudah mencoba selama lebih dari satu jam dan tidak dapat menemukan cara yang benar untuk melakukannya, meskipun itu mungkin cukup mudah:

Saya punya sesuatu seperti ini: foo/bar/test.html

Saya ingin menggunakan jQuery untuk mengekstrak semuanya setelah yang terakhir /. Pada contoh di atas, hasilnya adalah test.html.

Saya kira itu bisa dilakukan dengan menggunakan substrdan indexOf(), tetapi saya tidak dapat menemukan solusi yang berfungsi.

r0skar.dll
sumber

Jawaban:

243

Setidaknya tiga cara:

Ekspresi reguler:

var result = /[^/]*$/.exec("foo/bar/test.html")[0];

... yang mengatakan "ambil rangkaian karakter yang tidak mengandung garis miring" ( [^/]*) di akhir string ( $). Kemudian mengambil karakter yang cocok dari objek pertandingan yang dikembalikan dengan mengindeks ke it ( [0]); dalam objek yang cocok, entri pertama adalah seluruh string yang cocok. Tidak perlu untuk menangkap kelompok.

Contoh langsung

Menggunakan lastIndexOfdan substring:

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

lastIndexOfmelakukan seperti yang dilakukannya: Ia menemukan indeks kemunculan terakhir dari sebuah karakter (baik, string) dalam sebuah string, mengembalikan -1 jika tidak ditemukan. Sembilan dari sepuluh Anda mungkin ingin memeriksa nilai yang dikembalikan ( if (n !== -1)), tetapi di atas karena kami menambahkan 1 ke dalamnya dan memanggil substring, kami akhirnya melakukan str.substring(0)yang hanya mengembalikan string.

Menggunakan Array#split

Sudhir dan Tom Walters membahas hal ini di sini dan di sini , tetapi hanya untuk kelengkapan:

var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();

split membagi string menggunakan pembatas yang diberikan, mengembalikan larik.

The lastIndexOf/ substringsolusi adalah mungkin yang paling efisien (meskipun satu selalu harus berhati-hati mengatakan apa-apa tentang JavaScript dan kinerja, karena mesin bervariasi secara radikal dari satu sama lain), tetapi jika Anda melakukan ini ribuan kali dalam satu lingkaran, itu doesn tidak masalah dan saya akan berusaha untuk kejelasan kode.

TJ Crowder
sumber
1
Bagaimana Anda mengadaptasi ini untuk mengembalikan string sebelum garis miring terakhir? (Yaitu mengembalikan nama folder induk)
wbadart
28

Anda tidak memerlukan jQuery, dan ada banyak cara untuk melakukannya, misalnya:

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

Dimana myString berisi string Anda.

Tom Walters
sumber
3
+1 (untuk bekerja) menunjukkan bahwa jQuery bukanlah solusi terbaik untuk masalah javascript.
Andrew Jackman
1
Ini adalah solusi buggy, coba apa yang terjadi jika Anda menambahkan garis miring ke siput? Ia mengembalikan 0. Dan apa yang terjadi tidak ada siput? - mengembalikan NaN! wtf? kode buruk
Donatas Cereska
1) Pertanyaan terkait dengan masukan yang tidak nihil 2) Masukan terkait dengan masukan yang diakhiri dengan nama file (tidak ada garis miring) 3) Jawaban yang diterima memang merupakan solusi yang jauh lebih baik, sehingga jumlah suara terbanyak 4) Anda bebas menambahkan solusi Anda sendiri
Tom Walters
12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));
kasdega
sumber
9

Mencoba;

var str = "foo / bar / test.html";
var tmp = str.split ("/");
peringatan (tmp.pop ());
Sudhir Bastakoti
sumber
5

Ketika saya tahu stringnya akan cukup pendek maka saya menggunakan satu liner berikut ... (ingat untuk menghindari garis miring terbalik)

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

peringatan muncul dengan picture name.jpg

DaveAlger
sumber
2
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

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

Sekarang Anda memiliki last.htm di string jalur.

Zar E Ahmer
sumber
1

berat ringan

string.substring(start,end)

dimana

start = Required. Posisi tempat memulai ekstraksi. Karakter pertama ada di indeks 0`.

end = Optional. Posisi (hingga, tetapi tidak termasuk) tempat untuk mengakhiri ekstraksi. Jika dihilangkan, ini mengekstrak sisa string.

    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

ATAU

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3
Shailesh Sonare
sumber
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);

Ganti '_' || '/' untuk kebutuhan Anda sendiri

SMPLYJR
sumber
1

Seperti yang disyaratkan dalam Pertanyaan ::

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);
  }  

dan untuk pertanyaan yang ditanyakan di url (ditanyakan untuk satu kemunculan '=') ::
[ 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
sumber
0

Coba ini:

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

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

Patrycja Petryk
sumber
Solusi ini sudah ada dalam jawaban yang diterima, sebagai solusi ketiga yang mungkin
β.εηοιτ.βε