อย่างน้อยสามวิธี:
นิพจน์ทั่วไป:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
... ซึ่งระบุว่า "จับชุดอักขระที่ไม่มีเครื่องหมายทับ" ( [^/]*
) ต่อท้ายสตริง ( $
) จากนั้นจะจับอักขระที่ตรงกันจากวัตถุการจับคู่ที่ส่งคืนโดยการทำดัชนีลงใน ( [0]
); ในวัตถุที่ตรงกันรายการแรกคือสตริงที่ตรงกันทั้งหมด ไม่จำเป็นต้องจับกลุ่ม
ตัวอย่างสด
การใช้lastIndexOf
และsubstring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
ทำในสิ่งที่ดูเหมือน: พบดัชนีของการเกิดครั้งสุดท้ายของอักขระ (เช่นกันสตริง) ในสตริงโดยส่งคืนค่า -1 หากไม่พบ เก้าครั้งจากสิบคุณอาจต้องการตรวจสอบค่าส่งคืนนั้น ( if (n !== -1)
) แต่ในข้างต้นเนื่องจากเราเพิ่ม 1 เข้าไปและเรียกสตริงย่อยเราจะทำstr.substring(0)
สิ่งที่ส่งคืนสตริง
การใช้ Array#split
Sudhir และ Tom Walters ได้กล่าวถึงที่นี่และที่นี่แต่เพื่อความสมบูรณ์:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
แยกสตริงโดยใช้ตัวคั่นที่กำหนดส่งคืนอาร์เรย์
lastIndexOf
/ substring
การแก้ปัญหาคืออาจจะมีประสิทธิภาพมากที่สุด (ถึงแม้คนหนึ่งมักจะต้องมีความระมัดระวังพูดอะไรเกี่ยวกับ JavaScript และประสิทธิภาพการทำงานเนื่องจากเครื่องมือแตกต่างกันอย่างรุนแรงจากแต่ละอื่น ๆ ) แต่ถ้าคุณกำลังทำหลายพันครั้งนี้ในวงมัน doesn ไม่สำคัญและฉันพยายามอย่างเต็มที่เพื่อความชัดเจนของรหัส