Nhận giá trị của một chuỗi sau dấu gạch chéo trong JavaScript


112

Tôi đã cố gắng trong hơn một giờ và không thể tìm ra cách phù hợp để làm điều đó, mặc dù nó có lẽ khá dễ dàng:

Tôi có một cái gì đó như thế này: foo/bar/test.html

Tôi muốn sử dụng jQuery để giải nén mọi thứ sau lần cuối cùng /. Trong ví dụ trên, đầu ra sẽ là test.html.

Tôi đoán nó có thể được thực hiện bằng cách sử dụng substrindexOf(), nhưng tôi không thể tìm thấy một giải pháp hiệu quả.

Câu trả lời:


243

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 lastIndexOfsubstring:

var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);

lastIndexOflà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ở đâ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/ substringgiả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ã.


1
Làm thế nào bạn sẽ điều chỉnh điều này để trả về chuỗi trước dấu gạch chéo cuối cùng? (Tức là trả lại tên của thư mục mẹ)
wbadart

28

Bạn không cần jQuery và có nhiều cách để làm điều đó, ví dụ:

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

Nơi myString chứa chuỗi của bạn.


3
+1 (để làm việc) chỉ ra rằng jQuery không phải là giải pháp cuối cùng cho tất cả các vấn đề javascript.
Andrew Jackman

1
Đây là một giải pháp có lỗi, hãy thử điều gì sẽ xảy ra nếu bạn thêm dấu gạch chéo vào slug? Nó trả về 0. Và điều gì xảy ra nếu không có slug? - trả về NaN! wtf? mã xấu
Donatas Cereska

1) Câu hỏi liên quan đến đầu vào không rỗng 2) Đầu vào liên quan đến đầu vào kết thúc bằng tên tệp (không có dấu gạch chéo) 3) Câu trả lời được chấp nhận thực sự là một giải pháp tốt hơn nhiều, do đó có rất nhiều phiếu bầu 4) Bạn có thể thêm giải pháp của riêng mình
Tom Walters

12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));


5

Khi tôi biết chuỗi sẽ ngắn một cách hợp lý thì tôi sử dụng một lớp lót sau ... (hãy nhớ tránh dấu gạch chéo ngược)

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

cảnh báo bật lên với picture name.jpg


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

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

Bây giờ bạn có last.htm trong chuỗi đường dẫn.


1

nặng nhẹ

string.substring(start,end)

Ở đâu

start = Required. Vị trí bắt đầu trích xuất. Ký tự đầu tiên ở chỉ mục 0`.

end = Optional. Vị trí (tối đa, nhưng không bao gồm) nơi kết thúc quá trình trích xuất. Nếu bị bỏ qua, nó sẽ trích xuất phần còn lại của chuỗi.

    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

HOẶC LÀ

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3

1

Truy vấn:

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

Thay thế '_' || '/' theo nhu cầu của riêng bạn


1

Như yêu cầu trong Câu hỏi ::

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

và cho câu hỏi được hỏi trên url (yêu cầu một lần xuất hiện của '=') ::
[ 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);
  }

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.