หากคุณต้องประมวลผลตัวแปรที่มีเส้นทางที่สมบูรณ์ (เช่น:) thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg"
และคุณต้องการกลับมาเพียง "ชื่อไฟล์" คุณสามารถใช้:
theName = thePath.split("/").slice(-1).join().split(".").shift();
ผลลัพธ์จะเป็นtheName == "filename" ;
หากต้องการลองเขียนคำสั่งต่อไปนี้ลงในหน้าต่างคอนโซลของตัวแก้ไขข้อบกพร่อง chrome:
window.location.pathname.split("/").slice(-1).join().split(".").shift()
หากคุณมีการดำเนินการเพียงแค่ชื่อไฟล์และนามสกุล (อดีต .: theNameWithExt = "filename.jpg"
):
theName = theNameWithExt.split(".").shift();
ผลลัพธ์จะเป็นtheName == "filename"เหมือนกับข้างบน
หมายเหตุ:
- สาเหตุแรกช้ากว่าเล็กน้อยทำให้ทำงานได้มากกว่า แต่ทำงานได้ทั้งสองกรณีกล่าวคือสามารถแยกชื่อไฟล์โดยไม่มีนามสกุลจากสตริงที่กำหนดซึ่งมีพา ธ หรือชื่อไฟล์ด้วย ex ในขณะที่ตัวที่สองทำงานได้ก็ต่อเมื่อตัวแปรที่กำหนดมีชื่อไฟล์ที่มีนามสกุลเช่น filename.ext แต่จะเร็วกว่าเล็กน้อย
- โซลูชั่นทั้งสองทำงานได้ทั้งไฟล์โลคอลและเซิร์ฟเวอร์
แต่ฉันไม่สามารถพูดอะไรได้เลยเกี่ยวกับการเปรียบเทียบกับคำตอบอื่น ๆ หรือสำหรับเบราว์เซอร์หรือระบบปฏิบัติการที่เข้ากันไม่ได้
ตัวอย่างการทำงาน 1: เส้นทางที่สมบูรณ์
var thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg";
theName = thePath.split("/").slice(-1).join().split(".").shift();
alert(theName);
ตัวอย่างการทำงาน 2: ชื่อไฟล์ที่มีนามสกุล
var theNameWithExt = "filename.jpg";
theName = theNameWithExt.split("/").slice(-1).join().split(".").shift();
alert(theName);
ตัวอย่างการทำงาน 2: ชื่อไฟล์ที่มีนามสกุลเป็นสองเท่า
var theNameWithExt = "filename.tar.gz";
theName = theNameWithExt.split("/").slice(-1).join().split(".").shift();
alert(theName);