如何使用JavaScript获取文件扩展名?

2022-08-29 22:38:29

查看代码:

var file1 = "50.xsl";
var file2 = "30.doc";
getFileExtension(file1); //returns xsl
getFileExtension(file2); //returns doc

function getFileExtension(filename) {
    /*TODO*/
}

答案 1

较新的编辑:自从这个问题最初发布以来,很多事情都发生了变化 - Wallacer的修订答案以及VisioN的出色分解中有很多非常好的信息


编辑:仅仅因为这是公认的答案;华莱士的答案确实好多了:

return filename.split('.').pop();

我的旧答案:

return /[^.]+$/.exec(filename);

应该这样做。

编辑:为了回应PhiLho的评论,请使用如下内容:

return (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename) : undefined;

答案 2
return filename.split('.').pop();

编辑:

这是另一个我认为更有效的非正则表达式解决方案:

return filename.substring(filename.lastIndexOf('.')+1, filename.length) || filename;

VisioN下面的答案可以更好地处理一些角落情况,特别是没有扩展名的文件(包括等)。.htaccess

它的性能非常高,并且当点之前没有点或没有字符串时,通过返回而不是完整字符串,以可以说更好的方式处理角落情况。这是一个精心设计的解决方案,尽管很难阅读。把它贴在你的助手库中,然后使用它。""

旧编辑:

如果您要遇到没有扩展名的文件或没有扩展名的隐藏文件(请参阅上面VisioN对Tom的答案的评论),则更安全的实现将沿着这些路线

var a = filename.split(".");
if( a.length === 1 || ( a[0] === "" && a.length === 2 ) ) {
    return "";
}
return a.pop();    // feel free to tack .toLowerCase() here if you want

如果是一个,它是一个没有扩展名的可见文件,即。文件a.length

如果 和 它是一个没有扩展名的隐藏文件,即。.htaccessa[0] === ""a.length === 2

这应该可以解决稍微复杂一些的案件的问题。在性能方面,我认为这个解决方案在大多数浏览器中都比正则表达式慢一点。但是,对于大多数常见目的,此代码应该完全可用。