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.

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.


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.


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

9

Mencoba;

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

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


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.


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

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.