รับค่าของสตริงหลังเครื่องหมายทับใน JavaScript


113

ฉันพยายามมานานกว่าหนึ่งชั่วโมงแล้วและไม่สามารถหาวิธีที่ถูกต้องได้แม้ว่ามันจะค่อนข้างง่าย:

ฉันมีสิ่งนี้: foo/bar/test.html

ฉันต้องการใช้ jQuery เพื่อแยกทุกอย่างหลังจากที่ผ่าน/มา test.htmlในตัวอย่างข้างต้นส่งออกจะเป็น

ฉันเดาว่ามันสามารถทำได้โดยใช้substrและindexOf()แต่ฉันไม่พบวิธีแก้ปัญหาที่ใช้ได้

คำตอบ:


245

อย่างน้อยสามวิธี:

นิพจน์ทั่วไป:

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 ไม่สำคัญและฉันพยายามอย่างเต็มที่เพื่อความชัดเจนของรหัส


1
คุณจะปรับสิ่งนี้เพื่อส่งคืนสตริงก่อนสแลชสุดท้ายอย่างไร (คือคืนชื่อของโฟลเดอร์หลัก)
wbadart

28

คุณไม่จำเป็นต้องใช้ jQuery และมีหลายวิธีในการทำเช่น:

var parts = myString.split('/');
var answer = parts[parts.length - 1];

ที่ myString มีสตริงของคุณ


3
+1 (สำหรับการทำงาน) ชี้ให้เห็นว่า jQuery ไม่ใช่วิธีแก้ปัญหาแบบ end-all สำหรับปัญหาจาวาสคริปต์
Andrew Jackman

1
นี่คือวิธีแก้ปัญหารถบักกี้ลองจะเกิดอะไรขึ้นถ้าคุณเพิ่มเครื่องหมายทับลงในกระสุน มันส่งกลับ 0 และจะเกิดอะไรขึ้นที่ไม่มีกระสุน? - คืน NaN! wtf? รหัสไม่ถูกต้อง
Donatas Cereska

1) คำถามเกี่ยวข้องกับอินพุตที่ไม่เป็นโมฆะ 2) อินพุตเกี่ยวข้องกับอินพุตที่ลงท้ายด้วยชื่อไฟล์ (ไม่มีเครื่องหมายทับ) 3) คำตอบที่ได้รับการยอมรับนั้นเป็นทางออกที่ดีกว่ามากดังนั้นจึงมีการโหวตจำนวนมากขึ้น 4) คุณสามารถเพิ่มโซลูชันของคุณเองได้
Tom Walters



5

เมื่อฉันรู้ว่าสตริงจะสั้นพอสมควรฉันจึงใช้หนึ่งซับต่อไปนี้ ... (อย่าลืมเว้นแบ็กสแลช)

// if str is C:\windows\file system\path\picture name.jpg
alert( str.split('\\').pop() );

การแจ้งเตือนจะปรากฏขึ้นพร้อมกับ picture name.jpg


2
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

path.substring(pos, path.length()-pos) ;

ตอนนี้คุณมีlast.htmในสตริงเส้นทาง


1

น้ำหนักเบา

string.substring(start,end)

ที่ไหน

start = Required. ตำแหน่งที่จะเริ่มการสกัด อักขระตัวแรกอยู่ที่ดัชนี 0 "

end = Optional. ตำแหน่ง (สูงสุด แต่ไม่รวมถึง) ที่จะยุติการสกัด หากละเว้นมันจะแยกส่วนที่เหลือของสตริง

    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

หรือ

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

แทนที่ '_' || '/' ตามความต้องการของคุณเอง


1

ตามที่ต้องการในคำถาม ::

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

และสำหรับคำถามที่ถามใน url (ถามหนึ่งครั้งของ '=') ::
[ 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);
  }

0

ลองสิ่งนี้:

const url = "files/images/gallery/image.jpg";

console.log(url.split("/").pop());


โซลูชันนี้อยู่ในคำตอบที่ยอมรับแล้วเป็นวิธีที่สามที่เป็นไปได้
β.εηοιτ.βε
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.