我已经尝试了一个多小时,但无法找出正确的方法,尽管它可能很简单:
我有这样的东西:foo/bar/test.html
我想使用 jQuery 来提取最后一个之后的所有内容/
。在上面的例子中,输出将是test.html
.
我想可以使用substr
and indexOf()
,但我找不到可行的解决方案。
至少三种方式:
正则表达式:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
...它表示“抓取不包含斜杠的一系列字符”([^/]*
) 在字符串的末尾 ($
)。然后它通过索引从返回的匹配对象中获取匹配的字符([0]
);在匹配对象中,第一个条目是整个匹配的字符串。不需要捕获组。
实例 http://jsbin.com/igojef/2
Using lastIndexOf
and substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf http://es5.github.com/#x15.5.4.8顾名思义:它找到的索引last字符串中某个字符(或者字符串)的出现,如果未找到则返回 -1。十分之九你可能想要检查该返回值(if (n !== -1)
),但在上面,由于我们向其添加 1 并调用 substring,我们最终会这样做str.substring(0)
它只返回字符串。
Using Array#split
Sudhir 和 Tom Walters 涵盖了这一点here https://stackoverflow.com/a/8376537/157247 and here https://stackoverflow.com/a/8376546/157247,但只是为了完整性:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
使用给定的分隔符分割字符串,返回一个数组。
The lastIndexOf
/ substring
解决方案是probably最有效的(尽管人们总是必须小心地谈论有关 JavaScript 和性能的任何事情,因为引擎彼此之间差异如此之大),但除非你在一个循环中执行数千次,否则这并不重要,我会努力使代码清晰。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)