看代码:

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

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

当前回答

我已经晚了很多个月,但为了简单起见,我使用了这样的东西

var 文件名 = “I.Am.文件名.docx”; var nameLen = fileName.length; var lastDotPos = fileName.lastIndexOf(“.”); var 文件名子 = 假; if(lastDotPos === -1) { 文件名子 = 假; } 还 { 如果希望“.”也保留,请删除 +1 fileNameSub = fileName.substr(lastDotPos + 1, nameLen); } document.getElementById(“showInMe”).innerHTML = fileNameSub; <div id=“showInMe”></div>

其他回答

这个简单的解决方案

function extension(filename) {
  var r = /.+\.(.+)$/.exec(filename);
  return r ? r[1] : null;
}

测试

/* tests */ test('cat.gif', 'gif'); test('main.c', 'c'); test('file.with.multiple.dots.zip', 'zip'); test('.htaccess', null); test('noextension.', null); test('noextension', null); test('', null); // test utility function function test(input, expect) { var result = extension(input); if (result === expect) console.log(result, input); else console.error(result, input); } function extension(filename) { var r = /.+\.(.+)$/.exec(filename); return r ? r[1] : null; }

var filetypeArray = (file.type).split("/");
var filetype = filetypeArray[1];

在我看来,这是一个更好的方法。

快速和正确的路径工作

(filename.match(/[^\\\/]\.([^.\\\/]+)$/) || [null]).pop()

一些边缘情况

/path/.htaccess => null
/dir.with.dot/file => null

使用split的解决方案很慢,使用lastIndexOf的解决方案不能处理边缘情况。

Wallacer的回答很好,但还需要再检查一下。

如果文件没有扩展名,它将使用filename作为扩展名,这是不好的。

试试这个:

return ( filename.indexOf('.') > 0 ) ? filename.split('.').pop().toLowerCase() : 'undefined';
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为1,则它是一个没有扩展名ie的可见文件。文件

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

这应该可以解决稍微复杂一些的情况下的问题。在性能方面,我认为这个解决方案比大多数浏览器中的regex稍微慢一些。然而,对于大多数常见的目的,这段代码应该是完全可用的。