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

Put the filename and the filetype in a array

本文关键字:一个 数组 文件名 文件 类型      更新时间:2023-09-26

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

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

如何使其打印Funny - When you see it... fname[0]jpg fname[1]

提前谢谢。

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") );
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]);

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

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

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

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

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

?=被称为"展望",基本上意味着"跟随"。所以,上面写着:"如果后面没有点,则用点分割"。