如何在JavaScript中提取当前文档路径URL的文件名?

16

我正在尝试在JavaScript中提取当前文件名,而不使用任何参数。

$(location).attr('href').match(/([a-zA-Z\-\_0-9]+\.\w+)$/);
var current_path = RegExp.$1;
if ((current_path == 'index.html') || ...) {
  // something here
}
但是,当您像http://example.com/index.html?lang=ja这样访问时,它根本不起作用。 当然,在文件名之前会随机更改。 有什么想法?

1
哇,您需要学习一些JavaScript。$(location).attr('href') === location.href JavaScript是jQuery的前置条件,而不是反过来。 - qwertymk
我在这里回答了一个类似的问题:https://dev59.com/6nRB5IYBdhLWcg3wyqEd - Nadir
@Kei:我修改了标题以反映您仅询问当前路径的事实。希望这样可以。 - Henrik Erlandsson
7个回答

52

如果你正在寻找路径中的最后一个项目,请尝试这个:

var current_path = window.location.pathname.split('/').pop();

这个:

window.location.pathname

将会得到类似这样的东西:

"/questions/6543242/how-to-extract-the-filename-of-url-in-javascript"

然后.split()将把字符串分割成一个数组,.pop()会返回数组中的最后一个元素。


@npe 你错了。location.pathname 不会返回查询/哈希参数。例如,如果 http://somehost:8080/web/path/to/yourfile.txt?something=1222&another=more#andAHash 是你的 location.href,那么 location.pathname 将返回 '/web/path/to/yourfile.txt' - nf071590
请注意,此答案解决了提问者的特定情况,但不支持所有有效的URL。 - Henrik Erlandsson
我喜欢你没有直接回答原帖的问题。这个答案非常好,而且如果你需要动动脑筋而不是像大多数情况下那样复制粘贴,那么它可能更容易留在脑海中。+1 - JDandChips

14
function filename(path){
    path = path.substring(path.lastIndexOf("/")+ 1);
    return (path.match(/[^.]+(\.[^?#]+)?/) || [])[0];
}

console.log(filename('http://example.com/index.html?lang=ja'));

// returned value: 'index.html'

10
一个URL的文件名是指从最后一个"/"字符开始到以下符号之一结束的所有内容:1.) "?" (URL查询开始),或者2.) "#" (URL片段开始),或者3.) 字符串的结尾(如果没有查询或片段)。
下面这个经过测试的正则表达式可以实现此功能: .match(/[^\/?#]+(?=$|[?#])/);

1

有一个URL.js库,可以让处理URL变得非常容易。我推荐使用它!

示例

var uri = new URI('http://example.org/foo/hello.html?foo=bar');
uri.filename(); // => 'hello.html'

1
你不是认真地建议使用一个库来完成这个吧?那太过头了。 - Daniël Tulp

0

试试这个:

window.location.pathname.substring(1)

0

你的正则表达式不正确。尝试更具体一些:

.match(/([a-zA-Z\-\_0-9]+\.[a-zA-Z]{2,4})[\?\$]/);

说明:

查找在结束符(\$)或问号(\?)之前的任何数量的字母数字或连字符[a-zA-Z\-\_0-9]+,该结束符前有2到4个字母字符[a-zA-Z]{2,4}

测试结果:

("http://www.example.com/index.html?lang=ja").match(/([a-zA-Z\-\_0-9]+\.[a-zA-Z]{2,4})[\?\$]/);
var current_path = RegExp.$1;
alert(current_path);

0

你可以做一些更简单的事情:

var url = "http://google.com/img.png?arg=value#div5"
var filename = url.split('/').pop().split('#')[0].split('?')[0];

结果:

filename => "img.png"

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