var path = document.location.pathName;
example.com/store/order/cats
有时可能是:
example.com/store/order/cats/
注意最后的斜杠。
我喜欢在任何一种情况下都能归还猫的功能。如果没有尾随斜杠,我会去:
function() {
return path.split('/').pop();
}
但如果有斜杠,我需要pop()
两次。我试过这个:
function() {
return path.split('/').pop().pop();
}
引发了错误。
因此,由split(' /')产生的数组可以是:
["", "store", "order", "cats", ""] // trailing slash
或
["", "store", "order", "cats"] // no trailing slash
如何在任何可能的情况下归还猫?
答案 0 :(得分:1)
您可以先从字符串中删除最后一个尾随/
,然后在结果字符串上使用pop
。
var path = document.location.pathName.replace(/\/$/, '');
var pathName = path.split('/').pop();
正则表达式\/$
将匹配字符串中的尾随/
。 /
需要通过前缀\
来逃避。
您还可以使用以下字符串方法:
if (path.charAt(path.length - 1) === '/') {
path = path.substr(0, path.length - 1);
}
答案 1 :(得分:1)
正如其他人所说,你可以尝试删除最后一个字符(如果是斜线),然后使用第一个方法。
function getLastWordInPathName() {
var path = document.location.pathName.replace(/\/$/, '');
return path.split('/').pop();
}
但是,您的问题是询问为什么不能两次致电pop()
。
第一次调用pop()
时,将返回数组中最后一个元素的值。当您再次调用pop()
时,此函数将应用于上一个函数的结果 - 因此您在字符串pop()
上调用'/'
,而不在数组上调用。{/ p>
答案 2 :(得分:1)
这是迄今为止最简单的方法:
// Couldn't resist :)
function getCats( location ) {
if ( location.charAt( location.length-1 ) == "/" ) {
location = location.slice(0, -1)
}
return location.split("/").pop()
}
答案 3 :(得分:1)
Array.pop()返回最后一个元素,而不是原始Array。所以在最后一个元素上调用第二个pop()。如果它没有pop方法,则会出现错误...
要从最终使用path.replace(/.*\/([^\/]+)\/([^\/]+)\/?$/,'$1')
答案 4 :(得分:1)
正如您在此JSFiddle中所看到的那样http://jsfiddle.net/zarjay/mbggs/ pop
比<{1}}更有效
现在看看这段代码:
RegExp
您第一次看到function( ) {
var paths = path.split( "/" ),
cats = paths.pop( );
if( !cats ) {
cats = paths.pop( );
}
return cats;
}
路径后,删除了数组的最后一个元素
现在,如果您发现该元素为空,则只需再次pop
并获得所需的元素
你的表现会好很多,如果你在一个循环中使用这个数千次迭代,你将获得大约几秒钟的性能提升
这很整洁
答案 5 :(得分:1)
确实有很多方法可以给猫皮肤。这些假设您需要一个衬垫而不是更具防御性并且表现良好的东西。
如果你总是想要第二个
[1,2,3,4,5].slice(-2).shift()
4
提取所有非空分隔的项目:
'/a/b//c/d/'.match(/[^\/]+/g)
[a, b, c, d]
答案 6 :(得分:0)
您可以在末尾迭代并丢弃空路径元素:
function pathTail(path) {
for (var split = path.split("/"), tail = split.pop(); !tail; tail = split.pop());
return tail;
}
或者您可以使用正则表达式:
function pathTail(path) {
return path.replace(/^.*\/([^/]+)\/*$/, "$1");
}