Có ít nhất ba cách:
Một biểu thức chính quy:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
... có nội dung "lấy chuỗi ký tự không chứa dấu gạch chéo" ( [^/]*
) ở cuối chuỗi ( $
). Sau đó, nó lấy các ký tự đã so khớp từ đối tượng so khớp được trả về bằng cách lập chỉ mục vào nó ( [0]
); trong một đối tượng khớp, mục nhập đầu tiên là toàn bộ chuỗi đã khớp. Không cần nhóm chụp.
Ví dụ trực tiếp
Sử dụng lastIndexOf
và substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
làm những gì nó giống như nó làm: Nó tìm chỉ mục của lần xuất hiện cuối cùng của một ký tự (tốt, chuỗi) trong một chuỗi, trả về -1 nếu không tìm thấy. Chín lần trong số mười lần bạn có thể muốn kiểm tra giá trị trả về đó ( if (n !== -1)
), nhưng ở phần trên vì chúng tôi thêm 1 vào nó và gọi chuỗi con, chúng tôi sẽ kết thúc việc str.substring(0)
này chỉ trả về chuỗi.
Sử dụng Array#split
Sudhir và Tom Walters đã đề cập điều này ở đây và ở đây , nhưng chỉ để hoàn thiện:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
tách một chuỗi bằng cách sử dụng dấu phân cách đã cho, trả về một mảng.
Các lastIndexOf
/ substring
giải pháp là lẽ hiệu quả nhất (mặc dù một luôn luôn phải cẩn thận nói bất cứ điều gì về JavaScript và hiệu suất, vì các công cụ khác nhau để triệt lẫn nhau), nhưng trừ khi bạn đang làm hàng ngàn này lần trong một vòng lặp, nó doesn 'không quan trọng và tôi sẽ cố gắng để có được sự rõ ràng của mã.