成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[譯]如何更有效的獲取文件擴展名

wthee / 361人閱讀

摘要:如果上一步驟計算出的起始下標大于原始字符串長度,則返回比較方案參數(shù)結(jié)果正則表達式的的和在線演示和性能上述代碼的線上實例上述三個方案的性能測試源碼里如果獲取文件擴展名原文地址

問:如何獲取文件擴展名?
var file1 = "50.xsl";
var file2 = "30.doc";
getFileExtension(file1); //xsl
getFileExtension(file2); //doc

function getFileExtension(filename) {
  /*TODO*/
}
方案一:正則表達式
function getFileExtension1(filename) {
    return (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename)[0] : undefined;
}
方案二:使用Stringsplit方法
function getFileExtension2(filename) {
    return filename.split(".").pop();
}

上述兩種方案無法覆蓋一些極端情況,下面這個更健壯

方案三:使用Stringslice,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"

這貨怎么工作的?

String.lastIndexOf返回指定值的最后出現(xiàn)位置(本例里是:.)。如果返回-1,表示沒找到該指定值

當參數(shù)是filename,.hiddenfile時,lastIndexOf的返回值分別是-10。然后無符號移位操作符將-2轉(zhuǎn)成了4294967294、-1轉(zhuǎn)成了4294967295,這個小技巧保證了極端狀況下取值也不會異常

然后String.prototype.slice就以上面的計算結(jié)果作為起始下標從原始字符串中提取出了正確的文件擴展名。如果上一步驟計算出的起始下標大于原始字符串長度,則返回""

比較
方案 參數(shù) 結(jié)果
正則表達式 "" undefined
"filename" undefined
"filename.txt" "txt"
".hiddenfile" "hiddenfile"
"filename.with.many.dots.ext" "ext"
Stringsplit "" ""
"filename" "filename"
"filename.txt" "txt"
".hiddenfile" "hiddenfile"
"filename.with.many.dots.ext" "ext"
StringslicelastIndexOf "" ""
"filename" ""
"filename.txt" "txt"
".hiddenfile" ""
"filename.with.many.dots.ext" "ext"
在線演示和性能

上述代碼的線上實例
上述三個方案的性能測試

源碼

JavaScript里如果獲取文件擴展名

原文地址:How to get the file extension more efficiently

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79286.html

相關(guān)文章

  • 】WebSocket協(xié)議第五章——數(shù)據(jù)幀(Data Framing)

    摘要:概述本文為協(xié)議的第五章,本文翻譯的主要內(nèi)容為傳輸?shù)臄?shù)據(jù)相關(guān)內(nèi)容。注意無論協(xié)議是否使用了,幀都需要添加掩碼。服務(wù)端收到?jīng)]有添加掩碼的數(shù)據(jù)幀以后,必須立即關(guān)閉連接。服務(wù)端禁止在發(fā)送數(shù)據(jù)幀給客戶端時添加掩碼。基礎(chǔ)數(shù)據(jù)幀協(xié)議通過進行了正式的定義。 概述 本文為WebSocket協(xié)議的第五章,本文翻譯的主要內(nèi)容為WebSocket傳輸?shù)臄?shù)據(jù)相關(guān)內(nèi)容。 有興趣了解該文檔之前幾張內(nèi)容的同學(xué)可以見: ...

    nevermind 評論0 收藏0
  • []Mixin 函數(shù)

    摘要:函數(shù)通常是面向?qū)ο缶幊田L(fēng)格,具有副作用。因為在函數(shù)式編程中,很有可能這些引用指向的并不是同一個對象。記住,函數(shù)并不意味著函數(shù)式編程。函數(shù)可以用函數(shù)式編程風(fēng)格編寫,避免副作用并不修改參數(shù),但這并不保證。 軟件構(gòu)建系列 原文鏈接:Functional Mixins 譯者注:在編程中,mixin 類似于一個固有名詞,可以理解為混合或混入,通常不進行直譯,本文也是同樣。 這是軟件構(gòu)建系列教...

    zxhaaa 評論0 收藏0
  • [] 存儲和處理時間序列數(shù)據(jù)(“Time Series Databases”第三章)

    摘要:并且這種格式?jīng)]有事先對時間序列的數(shù)量做任何限制。使用格式來存儲時間序列數(shù)據(jù)的兩種可能的。其中存放了時間列序列列和數(shù)值列三列。隨著數(shù)據(jù)規(guī)模的繼續(xù)增長,基于的應(yīng)用程序越來越不適合處理這樣規(guī)模的時間序列數(shù)據(jù)了。 就像我們在前一章提到的,一個時間序列是一系列數(shù)值,每個數(shù)值都伴隨著一個時間值,代表數(shù)據(jù)被記錄時的時間。時間序列數(shù)據(jù)存入后就很少再需要修改了,查詢時經(jīng)常是查詢一個連續(xù)時間段的數(shù)據(jù),也可...

    EastWoodYang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<