Javascript 如何返回没有任何扩展名的文件名?
我使用下面的代码从url获取文件名,但是当有一个#和数字时,它不能完全工作。我怎样才能得到文件名,使它只返回“somefilename”或“somename”?各种场景的一些示例 文件格式示例Javascript 如何返回没有任何扩展名的文件名?,javascript,jquery,Javascript,Jquery,我使用下面的代码从url获取文件名,但是当有一个#和数字时,它不能完全工作。我怎样才能得到文件名,使它只返回“somefilename”或“somename”?各种场景的一些示例 文件格式示例 1. www.something.com/somefilename.html#108 or 2. www.someting.com/group//somename.shtml or 3. www.something.com/group/somename#1011 Jasva
1. www.something.com/somefilename.html#108
or
2. www.someting.com/group//somename.shtml
or
3. www.something.com/group/somename#1011
Jasvascript
$(document).ready(function() {
var url=window.location.href;
var filename = url.substring(url.lastIndexOf('/')+1);
alert(" filename " +filename);
var cleanfilename =filename.slice(0, -5)
alert(" cleanfilename" +cleanfilename);
alert($('#business-type :selected').val());
$('select[id^="business-type"] option[value='+cleanfilename+']').attr("selected","selected");
});
以下说明适用于这些类型的所有文件:
www.something.com/somefilename.html#108
www.someting.com/group//somename.shtml
www.something.com/group/somename#1011
假设我们将这样做:
var filename = "www.something.com/somefilename.html#108";
filename = filename.split("/");
filename = filename[filename.length - 1]; // Get the last one.
#
拆分它,不管它是否有字符,并获取第一个字符
filename = filename.split("#");
filename = filename[0]; // Get the first one.
filename = filename.substr(0, filename.lastIndexOf(".") - 1);
filename = filename[0]; // Get the filename.
function getFilename (filename) {
filename = filename.split("/");
filename = filename[filename.length - 1];
filename = filename.split("#");
filename = filename[0];
filename = filename.substr(0, filename.lastIndexOf(".") - 1);
filename = filename[0];
return filename;
}
您可以使用
substring
和lastIndexOf
函数来实现这一点。比如:
输入示例:
var link = "www.something.com/somefilename.html#108"
代码:
输出:
"somefilename"
编辑:
如果链接类似于www.something.com/somefilename.html#108/5.2
,那么以下内容可能会有所帮助:
var linkWithoutHash = link.substring(0, link.lastIndexOf("#"));
var fileName = linkWithoutHash.substring(linkWithoutHash .lastIndexOf("/") + 1, linkWithoutHash .lastIndexOf("."));
console.log(fileName);
我会去的
var filename = document.location.pathname.match(/([^/]*?)(?:\..*)?$/)[1]
这只需两行代码即可完成:
var a = location.pathname.split("/").pop();
a.substring(0, a.indexOf('.'));
.split(“/”).pop()
检索URL最后一个/
之后的部分,不包括散列(#
)或搜索(?
)属性
.substring(0,a.indexOf('.')
删除
之后的所有内容,删除文件扩展名
在我的机器上,这个过程总共需要0.092ms,而使用regex的方法需要0.253ms。如果这一微小的时差对您来说并不重要,那么使用regex总体来说会稍微短一些,也更简单一些。我的简单想法:
- 将文件路径拆分为字符数组
- 向后迭代,将每个字符累积为文件名
- 只要它看到
或
,就将文件名重置为空字符串#
- 一旦点击一个
,就结束/
var paths = [ 'www.something.com/somefilename.html#108',
'www.someting.com/group//somename.shtml',
'www.something.com/group/somename#1011',
'ftp://somewhere.somedot/f/f/name',
'ftp://somewhere.somedot/var1/var2/filename.dot.dot',
'dir/naked_filename.etc'];
function extractName(s){
var chars = s.split('');
var c = chars.pop();
var filename = '';
while (c!='/' && chars.length>0){
if (c=='#' || c=='.') filename = '';
else filename = c + filename;
c = chars.pop();
}
return filename;
}
console.log( paths.map(extractName) );
// [ "somefilename", "somename", "somename", "name", "filename", "naked_filename"]
不要使用完整的<代码> HeRF,考虑使用另一个<代码>位置< /COD>属性来启动搜索,例如“代码>窗口。位置。路径名< /代码>”,它可以为您去掉查询字符串和位置片段。您只需将“扩展名”(如果存在)从末尾去掉即可。
location.hash
也可以包含斜线和点(“…filename.html#108/5.2”),因此这种方法不是防弹的。@myf感谢您的解释。相应地更新了答案。我投票给@MuhammadImran,因为如果文件名有几个点,这会起作用。我用您在答案中提供的示例URL尝试了这一点,结果返回“s”:(这里也一样,我刚得到的文件名“r”不是很完美!它完成了OP要求的所有功能。但是,如果在文件名中有一个额外的点(在扩展名之前):var filename=document.location.pathname.match(/([^/]*?)(?:\.[^.]*)?$/)[1]
var paths = [ 'www.something.com/somefilename.html#108',
'www.someting.com/group//somename.shtml',
'www.something.com/group/somename#1011',
'ftp://somewhere.somedot/f/f/name',
'ftp://somewhere.somedot/var1/var2/filename.dot.dot',
'dir/naked_filename.etc'];
function extractName(s){
var chars = s.split('');
var c = chars.pop();
var filename = '';
while (c!='/' && chars.length>0){
if (c=='#' || c=='.') filename = '';
else filename = c + filename;
c = chars.pop();
}
return filename;
}
console.log( paths.map(extractName) );
// [ "somefilename", "somename", "somename", "name", "filename", "naked_filename"]