17

在 javascript/jquery 中,给定一个文件夹的路径,如:

"http://www.blah/foo/bar/" 

或者

"http://www.blah/foo/bar" (this one doesn't have a slash in the end)

如何提取最后一个文件夹的名称?在这种情况下,它会是"bar"

有没有通过内置函数的简单方法?

谢谢。

4

8 回答 8

32

使用正则表达式的力量:

var name = path.match(/([^\/]*)\/*$/)[1]

请注意,这不是最后一个“文件夹”(在您的情况和 URL 的一般情况下未定义),而是最后一个路径标记。

于 2013-05-22T15:12:27.860 回答
5

使用正则表达式!或者:

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);
于 2013-05-22T15:10:36.410 回答
3

看看这个:

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

于 2016-04-19T16:48:48.720 回答
2
var myString = "http://www.blah/foo/bar";
var pathElements = myString.replace(/\/$/, '').split('/');
var lastFolder = pathElements[pathElements.length - 1];

这是纯 JavaScript,不需要 jQuery。

于 2013-05-22T15:10:19.923 回答
1

我通常在javascript中使用splitand的组合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
于 2020-03-06T07:17:03.047 回答
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 示例

虽然它可能不是最优雅的答案,但对于可能不知道正则表达式的人来说,它似乎是最容易理解的。

更新了 JSFiddle 以显示结果。

于 2013-05-22T15:16:20.497 回答
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] : "";
于 2013-05-22T15:19:22.650 回答
0

一个简单的正则表达式就可以完成这项工作

var s = "toto1/toto2/toto3toto1/totofinale/";

s.replace(/^.*\/([^\/]+\/)$/, "$1")
于 2016-09-01T13:17:37.203 回答