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

时间:2011-07-01 03:19:33

标签: javascript jquery regex

我正在尝试在没有任何参数的情况下在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 时,它根本不起作用。当然,文件名将随机更改。

有什么想法吗?

7 个答案:

答案 0 :(得分:44)

如果您要查找路径中的最后一项,请尝试以下操作:

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

此:

window.location.pathname

会给你一些类似的东西:

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

然后.split()会将字符串拆分为数组,.pop()将为您提供数组中的最后一项。

答案 1 :(得分:9)

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'

答案 2 :(得分:9)

网址的文件名是上一个"/"之后的所有内容,最多可达以下之一:1。)"?"网址查询开头)或2 。)"#" URL片段的开头),或者3.)字符串的结尾(如果没有查询或片段)。

这个经过测试的正则表达式可以解决这个问题:

.match(/[^\/?#]+(?=$|[?#])/);

答案 3 :(得分:1)

有一个URL.js库可以让您轻松使用网址。我推荐它!

示例

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

答案 4 :(得分:0)

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

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

说:

在一个包含2到4个字母字符[a-zA-Z\-\_0-9]+的完整停靠点之前找到任意数量的字母数字或超量[a-zA-Z]{2,4},该字母字符在结尾(\$)或问号({{{ 1}})

测试:

\?

答案 5 :(得分:0)

试试这个:

window.location.pathname.substring(1)

答案 6 :(得分:0)

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

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

结果:

filename => "img.png"