如何在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"