JavaScript中获取最后一个斜杠后面的字符串的值

197

我已经尝试了一个多小时,但始终无法找到正确的方法,尽管它可能很简单:

我有这样的东西:foo/bar/test.html

我想使用jQuery提取最后一个/之后的所有内容。在上面的例子中,输出将是test.html

我猜可以使用substrindexOf()来完成,但我找不到可行的解决方案。

12个回答

362

至少有三种方法:

正则表达式:

var result = /[^/]*$/.exec("foo/bar/test.html")[0];

该正则表达式意思是在字符串末尾 ($) 抓取不包含斜杠的一系列字符 ([^/]*)。然后通过索引 ([0]) 获取匹配的字符,并从返回的匹配对象中提取出来;在匹配对象中,第一个条目是整个匹配的字符串。不需要捕获组。

实时示例

使用 lastIndexOfsubstring:

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

lastIndexOf 的作用与其名字类似:它在一个字符串中查找字符(或字符串)最后一次出现的索引,如果没有找到则返回-1。大多数情况下你可能希望检查返回值 (if (n !== -1)),但上面的例子中由于我们要在其基础上加1并调用 substring,所以会得到 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使用给定的分隔符来拆分字符串,并返回一个数组。

在 JavaScript 中,lastIndexOf/substring 的解决方案 可能 是最有效的(尽管在谈论 JavaScript 性能时必须非常小心,因为引擎之间差异很大),但除非您需要在循环中执行数千次此操作,否则这并不重要,建议优先考虑代码的清晰易懂性。


2
你会如何修改代码以返回最后一个斜杠之前的字符串?(即返回父文件夹的名称) - wbadart

71

试试这个:

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

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


此解决方案已经在被接受的答案中作为第三种可能的解决方案。 - β.εηοιτ.βε

36

你不需要使用jQuery,有许多方法可以实现它,例如:

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

当 myString 包含你的字符串时。


3
+1 (for working) 意味着支持某人的工作表现,该评论指出 jQuery 并非解决 JavaScript 问题的万能方法。 - Andrew Jackman
1
这是一个有缺陷的解决方案,试试如果在slug后面添加斜杠会发生什么?它会返回0。如果没有slug会发生什么?- 返回NaN!真是糟糕的代码。 - Donatas Cereska
2
  1. 这个问题与一个非空输入有关
  2. 输入与以文件名结尾的输入有关(没有斜杠)
  3. 接受的答案确实是更好的解决方案,因此得到了众多赞同票
  4. 您可以添加自己的解决方案
- Tom Walters

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

10

尝试一下:

var str = "foo/bar/test.html";
var tmp = str.split("/");
alert(tmp.pop());
解释:以上代码使用JavaScript语言,将字符串"foo/bar/test.html"通过"/"分割为数组,并弹出最后一个元素"test.html",然后通过弹出框(alert)输出。

7

当我知道字符串会比较短时,我会使用以下的一行代码(请记得转义反斜杠)

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

弹出一个带有 图片名.jpg 的警告框


4

这可能是一个老旧的帖子,但我偶然发现了更好的选项:

var str = "foo/bar/test.html";
alert(str.split('/').pop());
// output will be: test.html

2
轻量级
string.substring(start,end)

作用

start = 必需。提取开始的位置。第一个字符的索引为0。

end = 可选。提取结束的位置(但不包括该位置)。如果省略,则提取字符串的其余部分。

    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

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

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

现在您的路径字符串中有last.htm

1

As required in Question::

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上提出的问题(仅请求一个'='符号之后的内容):
[https://dev59.com/aIDba4cB1Zd3GeqPFYdo][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);
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接