将文件名和文件类型放在一个数组中

时间:2012-02-26 12:14:09

标签: javascript arrays filenames

我想将文件名和文件类型放在一个数组中,我知道答案(split),但我不知道如何在扩展开始之前查找最后一个点。

示例:Funny - SMS 02.jpg将在一个数组中获得Funny - SMS 02,在另一个数组中获得jpg。但是,当我尝试拆分已经包含点的文件的名称时,麻烦就开始了。 Funny - When you see it....jpgFunny - When you see it中打印fname[0]jpg打印fname[1]

如何将Funny - When you see it...打印为fname[0],将jpg打印为fname[1]

提前致谢。

4 个答案:

答案 0 :(得分:3)

function getFnameExt(filename) {
  var parts = filename.split('.'), ext = parts.pop(), fname = parts.join('.');
  return [ fname, ext ];
}

console.log( getFnameExt("Funny - When you see it....jpg") );

答案 1 :(得分:2)

var array = [];
var s = "Funny - When you see it....jpg";
var lastDot = s.lastIndexOf(".");
array[0] = s.substring(0, lastDot);
array[1] = s.substring(lastDot + 1);
alert(array[0] + "---" + array[1]);

答案 2 :(得分:1)

对于这些类型的任务,拆分通常很麻烦。正则表达式更强大:

var matches = /^(.*)\.([^.]*)$/g.exec("Funny - When you see it....jpg");
matches.shift();

// matches:
// ["Funny - When you see it...", "jpg"]

这使字符串与正则表达式匹配,从而产生具有三个元素的数组。第一个是完全匹配,不需要,所以转移它。

^       begin of string
.*      any amount of any character
\.      a dot
[^.]*   any amount of any character except a dot
$       end of string

使用字符串锚点的开头/结尾,.*必须包含最后一个点之前的所有字符。

()表示一个组,它将匹配的子字符串添加到数组中。

答案 3 :(得分:0)

 fname = "Funny - When you see it....jpg"
 parts = fname.split(/\.(?=[^.]*$)/) 
 // parts=["Funny - When you see it...", "jpg"]

?=被称为'lookahead',基本上意味着“后跟”。所以,上面写着:“如果之后没有点,则用点分割。”