原文出處:取得文件擴(kuò)展名
問題 1: 怎樣取得文件擴(kuò)展名?
var file1 = "50.xsl";
var file2 = "30.doc";
getFileExtension(file1); //returs xsl
getFileExtension(file2); //returs doc
function getFileExtension(filename) {
/*TODO*/
}
解決方法 1: 正則表達(dá)式
function getFileExtension1(filename) {
return (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename)[0] : undefined;
}
解決方法 2: String的split
方法
function getFileExtension2(filename) {
return filename.split('.').pop();
}
這兩種解決方法不能解決一些邊緣情況,這有另一個更加強(qiáng)大的解決方法陋葡。
解決方法 3: String的slice
刀崖、lastIndexOf
方法
function getFileExtension3(filename) {
return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2);
}
console.log(getFileExtension3('')); // ''
console.log(getFileExtension3('filename')); // ''
console.log(getFileExtension3('filename.txt')); // 'txt'
console.log(getFileExtension3('.hiddenfile')); // ''
console.log(getFileExtension3('filename.with.many.dots.ext')); // 'ext'
這是如何實(shí)現(xiàn)的呢?
-
String.lastIndexOf() 方法返回指定值(本例中的
'.'
)在調(diào)用該方法的字符串中最后出現(xiàn)的位置,如果沒找到則返回 -1。 - 對于
'filename'
和'.hiddenfile'
含衔,lastIndexOf
的返回值分別為0
和-1
無符號右移操作符(?>)將-1
轉(zhuǎn)換為4294967295
矾瘾,將-2
轉(zhuǎn)換為4294967294
,這個方法可以保證邊緣情況時(shí)文件名不變巧婶。 -
String.prototype.slice() 從上面計(jì)算的索引處提取文件的擴(kuò)展名乾颁。如果索引比文件名的長度大,結(jié)果為
""
艺栈。
對比
獲取文件名對比圖.png
實(shí)例與性能
這里 是上面解決方法的實(shí)例英岭。
這里 是上面三種解決方法的性能測試。