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

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

任何的想法?

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

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

这个:

 window.location.pathname 

会给你一些类似的东西:

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

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

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

这个测试正则表达式的功效:

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

 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' 

有一个URL.js库,可以很容易地使用URL。 我推荐它!

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

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

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

说:

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

测试:

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

试试这个:

 window.location.pathname.substring(1) 

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

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

结果:

 filename => "img.png"