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