在javascript / jquery中,给出了一个文件夹的路径,如:
"http://www.blah/foo/bar/"
或
"http://www.blah/foo/bar" (this one doesn't have a slash in the end)
如何提取最后一个文件夹的名称?在这种情况下,它将是"bar"
。
通过内置功能有一个简单的方法吗?
感谢。
答案 0 :(得分:22)
使用正则表达式的强大功能:
var name = path.match(/([^\/]*)\/*$/)[1]
请注意,这不是最后一个“文件夹”(在您的情况下并未在URL的一般情况下定义),而是最后一个路径标记。
答案 1 :(得分:4)
使用正则表达式!或者:
var arr = 'http://www.blah/foo/bar/'.split('/');
var last = arr[arr.length-1] || arr[arr.length-2];
此帐户代表“http://www.blah/foo/bar////”:p(或崩溃浏览器)
var arr = 'http://www.blah/foo/bar/////'.split('/');
var last = (function trololol(i) {
return arr[i] || trololol(i-1);
})(arr.length-1);
答案 2 :(得分:2)
var myString = "http://www.blah/foo/bar";
var pathElements = myString.replace(/\/$/, '').split('/');
var lastFolder = pathElements[pathElements.length - 1];
这是纯JavaScript,不需要jQuery。
答案 3 :(得分:2)
看看这个:
var lastFolder = location.href.split('/').filter(function(el) {
return el.trim().length > 0;
}).pop();
alert( location.href.split('/').filter(function(el) { return el.trim().length > 0; }).pop() );
alert( location.href );
var test = "http://www.blah/foo/bar/" ;
alert( test.split('/').filter(function(el) { return el.trim().length > 0; }).pop() );

答案 4 :(得分:1)
我通常在JavaScript中使用split
和pop
的组合,因为我通常是从aws s3获得文件夹地址,它已经很干净了:
const teststring = 'image_1/ArtService/GB/ART-123/dependants/ASM-123';
const folder = teststring.split('/').pop();
console.log('folder:', folder);// ASM-123
答案 5 :(得分:0)
您可以将字符串拆分为列表,并通过函数获取列表中的最后一个元素。
function checkString(stringToCheck) {
var list1 = stringToCheck.split('/');
if (list1[list1.length - 1].length < 1) {
var item = list1[list1.length - 2]
} else {
var item = list1[list1.length - 1];
}
$('#results').append('Last Folder in '+stringToCheck+': <b>'+item+'</b><br>');
}
从那里你可以找到最后一个实际元素。
虽然它可能不是最优雅的答案,但对于可能不了解正则表达式的人来说,似乎最容易理解。
更新了JSFiddle以显示结果。
答案 6 :(得分:0)
var str = "...";
var segments = str.split("/");
var lastDir = (segments.length > 1) ? segments[segments.length - 2] : "";
第一个例子产生“bar”。 第二个例子产生“foo”。
如果你想忽略尾随斜线并将最后一段视为一个文件夹,那么稍微调整一下@bdesham的RegExp即可:
var segments = str.replace(/\/+$/, '').split('/');
var lastDir = (segments.length > 0) ? segments[segments.length - 1] : "";
答案 7 :(得分:0)
一个简单的正则表达式可以完成这项工作
var s = "toto1/toto2/toto3toto1/totofinale/";
s.replace(/^.*\/([^\/]+\/)$/, "$1")