我想将文件名和文件类型放在一个数组中,我知道答案(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]
?
提前致谢。
答案 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',基本上意味着“后跟”。所以,上面写着:“如果之后没有点,则用点分割。”