从变量文件中获取扩展名 - Javascript - jQuery

时间:2011-06-14 09:35:37

标签: javascript jquery

我有一个varable var file = "testfile.txt";我正在使用以下脚本来查找其扩展名并且效果很好;

var parts = file.split('.');
var flename = parts[0];
var ext = parts[1];

但是,如果我的文件名包含多个点,则逻辑很糟糕。txtfilename.txt,但file.nam.e.txt或其他情况则不会。

有人建议我使用javascript和(或)jQuery做最简单的解决方案吗?

提前致谢..

6 个答案:

答案 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.namefile.extfile.path访问属性。