我有一个varable var file = "testfile.txt";
我正在使用以下脚本来查找其扩展名并且效果很好;
var parts = file.split('.');
var flename = parts[0];
var ext = parts[1];
但是,如果我的文件名包含多个点,则逻辑很糟糕。txt
会filename.txt
,但file.nam.e.txt
或其他情况则不会。
有人建议我使用javascript和(或)jQuery做最简单的解决方案吗?
提前致谢..
答案 0 :(得分:5)
为了获得一些替代方案,您也可以使用正则表达式提取它:
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 = '';
}
答案 1 :(得分:3)
var ext = 'hibernate.cfg.xml';
var index = ext.lastIndexOf('.');// .xml
alert(ext.substring(index+1)); // xml
答案 2 :(得分:2)
var parts = file.split('.')
, ext = (parts.length > 1 ? parts.pop() : null)
, filename = parts.join('.');
答案 3 :(得分:1)
简单:
var ext = parts[parts.length - 1];
至于文件名:
var flename = parts.slice(0, parts.length - 1).join(".");
最后但并非最不重要的是,我还会在file
不为空的代码块之前验证以避免异常。
编辑:另一种更优雅的类似方式:
var ext = parts.splice(-1).join();
var flename = parts.join(".");
请注意,与第一种方法不同,这实际上会更改数组parts
,所以不要在之后使用它。
答案 4 :(得分:0)
如果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);
}
答案 5 :(得分:0)
您已经获得了许多工作解决方案,但我认为我会为面向对象的解决方案做出贡献,这可能对更高级的方案有用:
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
访问属性。