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 lastIndexOf
dan substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
melakukan 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
/ substring
solusi 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.