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

见代码:


var file1 = "50.xsl";

var file2 = "30.doc";

getFileExtension(file1); //returns xsl

getFileExtension(file2); //returns doc


function getFileExtension(filename) {

    /*TODO*/

}


料青山看我应如是
浏览 702回答 3
3回答

牧羊人nacy

自从这个问题最初发布以来,很多事情都发生了变化-有很多非常好的信息墙纸的修订答案以及视力极差编辑:仅仅因为这是公认的答案;壁虎的回答确实要好得多:return filename.split('.').pop();我以前的回答是:return /[^.]+$/.exec(filename);应该这么做。编辑:在回应PhiLho的评论时,请使用如下内容:return (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename) : 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是一个没有扩展名的可见文件。档案如果a[0] === ""和a.length === 2这是一个没有扩展名的隐藏文件。.htaccess希望这有助于澄清稍微复杂的案件的问题。就性能而言,我相信这个解决方案是比regex慢一点在大多数浏览器中。但是,对于大多数常见的目的,这段代码应该是完全可用的。

守候你守候我

以下解决方案是快地和矮的足够用于大容量操作并保存额外字节:&nbsp;return&nbsp;fname.slice((fname.lastIndexOf(".")&nbsp;-&nbsp;1&nbsp;>>>&nbsp;0)&nbsp;+&nbsp;2);下面是另一个单行非regexp通用解决方案:&nbsp;return&nbsp;fname.slice((Math.max(0,&nbsp;fname.lastIndexOf("."))&nbsp;||&nbsp;Infinity)&nbsp;+&nbsp;1);两种方法都能正确地使用没有扩展名的名称(例如:我的档案)或以.点(例如:.htaccess):&nbsp;""&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-->&nbsp;&nbsp;&nbsp;"" &nbsp;"name"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-->&nbsp;&nbsp;&nbsp;"" &nbsp;"name.txt"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-->&nbsp;&nbsp;&nbsp;"txt" &nbsp;".htpasswd"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-->&nbsp;&nbsp;&nbsp;"" &nbsp;"name.with.many.dots.myext"&nbsp;&nbsp;&nbsp;-->&nbsp;&nbsp;&nbsp;"myext"如果您关心的速度,您可以运行基准并检查所提供的解决方案是最快的,而短的解决方案则是非常快的:短的一个是如何工作的:String.lastIndexOf方法返回子字符串的最后一个位置(即".")在给定的字符串(即fname)。如果没有找到子字符串,则方法返回-1.文件名中点的“不可接受”位置是-1和0,分别指没有扩展的名称(例如:"name")和以点开头的名称(例如,".htaccess").零填充右移位算子&nbsp;(>>>)如果与零一起使用会影响负数转换-1到4294967295和-2到4294967294,这对于在边缘情况下保持文件名不变很有用(这里的技巧是这样的)。String.prototype.slice从按描述计算的位置提取文件名的部分。如果位置号大于字符串方法的长度,则返回"".如果您想要更清晰的解决方案,它将以同样的方式工作(加上对完整路径的额外支持),请检查下面的扩展版本。这个解决方案将是慢点比以前的一行更容易理解。function&nbsp;getExtension(path)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;basename&nbsp;=&nbsp;path.split(/[\\/]/).pop(),&nbsp;&nbsp;//&nbsp;extract&nbsp;file&nbsp;name&nbsp;from&nbsp;full&nbsp;path&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;(supports&nbsp;`\\`&nbsp;and&nbsp;`/`&nbsp;separators) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;basename.lastIndexOf(".");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;get&nbsp;last&nbsp;position&nbsp;of&nbsp;`.` &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(basename&nbsp;===&nbsp;""&nbsp;||&nbsp;pos&nbsp;<&nbsp;1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;file&nbsp;name&nbsp;is&nbsp;empty&nbsp;or&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;`.`&nbsp;not&nbsp;found&nbsp;(-1)&nbsp;or&nbsp;comes&nbsp;first&nbsp;(0) &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;basename.slice(pos&nbsp;+&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;extract&nbsp;extension&nbsp;ignoring&nbsp;`.`}console.log(&nbsp;getExtension("/path/to/file.ext")&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;>>&nbsp;"ext"这三个变体都应该在客户端的任何Web浏览器中工作,也可以在服务器端NodeJS代码中使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript