簡體   English   中英

es2018 中不區分大小寫的字符串操作

[英]Case-insensitive string operations in es2018

JavaScript 中的String object 提供了多種本地方法:

它們都區分大小寫。

當談到不區分大小寫的操作時,我們有一些流行的選項,盡管它們都遠非理想。

toUpperCase() \ toLowerCase()

最流行的技巧是使用toUpperCase() \ toLowerCase()方法。 但是,它們不適用於所有語言(德語、土耳其語等),並且即使通過查看第一對字符就可以知道操作的結果,但轉換兩個字符串的性能也會受到影響。

RegEx

第二個選項是使用帶有i選項的RegEx es。 但是,它也有兩個主要缺點:

  • 不清楚和凌亂的代碼( RegEx es 幾乎總是這樣)
  • 編寫RegEx字符串並將其編譯為每個操作的實際RegEx導致的性能開銷

此外,這些解決方案是在古代 JavaScript VM 時代“發明”的。 現在有了Intl (和其他更新的)API 和 TypeScript 和 Babel 等轉譯器以及core-js等 polyfill 庫,我們可以輕松地為任何應用程序 API 使用最新的 Z686155AF75A60A0F6E9D80C1F7。

es2018中不區分大小寫的String操作有什么解決辦法?

我正在尋找生產(想想 MDN polyfills)質量性能 i18n 友好的代碼,該代碼旨在成為解決問題的通用首選解決方案。

以下是不區分大小寫的startsWith的一些實現

不將整個字符串轉換為小寫,而是僅使用測試字符串的長度:

function startsWith_Insensitive(str, test) { 
    return str.substr(0, test.length).toLowerCase() === test.toLowerCase();
}

而且我認為一個一個地轉換和測試字符也會更有效,如果有任何不同就停止,而不是全部轉換然后測試它們,所以看起來像這樣:

function startsWith_Insensitive(str, test) {
    if (str.length < test.length) return false;
    for (let i = 0; i < test.length; i++) {
        if (str[i].toLowerCase() !== test[i].toLowerCase()) 
            return false    
    } 
    return true    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM