问题描述
||
这个问题已经在这里有了答案:
解决方法
就那么简单:
var ext = parts[parts.length - 1];
至于文件名:
var flename = parts.slice(0,parts.length - 1).join(\".\");
最后但并非最不重要的一点是,我还将在代码段之前验证ѭ2not不是空的以避免异常。
编辑:另一种更优雅的类似方法:
var ext = parts.splice(-1).join();
var flename = parts.join(\".\");
请注意,与第一种方法不同,这实际上将更改数组parts
,因此以后不要使用它。
, 只是为了获得一些替代方法,您也可以使用正则表达式提取它:
var full = \"filename.ext.txt\";
// Get all characters before the last dot
var filename = /.*(?=\\.)/.exec(full);
// Get the part without dots on the end
var extension = /[^\\.]*$/.exec(full);
// If there are no dots in the full name,filename will be empty and extension
// will contain the whole filename. Do some extra processing:
if(!filename){
filename = full;
extension = \'\';
}
, var ext = \'hibernate.cfg.xml\';
var index = ext.lastIndexOf(\'.\');// .xml
alert(ext.substring(index+1)); // xml
, var parts = file.split(\'.\'),ext = (parts.length > 1 ? parts.pop() : null),filename = parts.join(\'.\');
, 如果file
始终至少包含一个点,则可以使用:
var ext = file.slice(file.lastIndexOf(\".\")+1);
var filename = file.slice(0,file.lastIndexOf(\".\"));
在更一般的情况下,file
可能不包含点:var ext = file.indexOf(\".\")<0?\"\":file.slice(file.lastIndexOf(\".\")+1);
var filename = file.indexOf(\".\")<0?file:file.slice(0,file.lastIndexOf(\".\"));
最后,仅出于漂亮代码的目的:
var lastDotIndex = file.lastIndexOf(\".\");
if (lastDotIndex == -1) { // Handles the case where there is no dot in \"file\"
var fileExtension = \"\";
var fileNameWithoutExtension = file;
} else { // Common case
var fileExtension = file.slice(lastDotIndex+1);
var fileNameWithoutExtension = file.slice(0,lastDotIndex);
}
, 您已经获得了许多可行的解决方案,但是我认为我将为面向对象的解决方案做出贡献,这可能对更高级的场景很有用:
var File = function(fname){
if (typeof fname === \"undefined\") {
console.log(\"You need to pass a filename or path to file\");
return false;
}
// Correct slashes
fname = fname.replace(\"\\\\\",\"/\",fname);
this.org = fname;
if (fname.lastIndexOf(\"/\")) {
this.path = fname.substr(0,fname.lastIndexOf(\"/\")+1);
fname = fname.substr(fname.lastIndexOf(\"/\")+1);
}
this.ext = fname.substr(fname.lastIndexOf(\".\")+1);
this.name = fname.substr(0,fname.lastIndexOf(\".\"));
}
然后,您可以执行以下操作:
var file = new File(\"/full/path/to/file/foo.bar.baz\");
现在,使用file.name
,file.ext
和file.path
访问属性。