2016-04-07 106 views
-1

我看到有類似的問題,但我沒有找到符合我的具體目標的問題。什麼是在JavaScript中通過字符串的字符最有效的方法?

我已經開發了一個小的功能,它通過串環路(假設字符10和160之間)提取

  • 通配符(如$ 1,$ 2,...) - 所謂的 「特價」
  • 它們之間的字符串

要解析的字符串的示例:「word1 word2 $ 1 word3 $ 2 word4 $ 3」。輸出的

實施例:

{ 
    strings: [word1 word2, word3, word4], 
    specialChars: 3 
} 

可以肯定也有極限的情況下(沒有通配符,只有1個通配符,通配​​符可以是在開始或字符串的末尾)。

我寫了到目前爲止的算法如下(有東西要進行修改,但我更感興趣的是效率不是那麼結果是,在這個問題):

function parsestr(str: string) { 
    let specialChars = [], 
     plaintextParts = [], 
     resultObject = { 
      strings: [], 
      specialChars: 0 
     }; 

    // convert to char array and loop 
    str.split('').forEach(function(c, i){ 
     if (c=='$') specialChars.push(i); 
    }); 
    resultObject.specialChars = specialChars.length; 

    // extract plain text parts 
    if (specialChars.length == 0) return resultObject; 

    // part before first wildcard 
    if (specialChars[0]>0) plaintextParts.push(str.substr(0, specialChars[0]-1)); 
    // 2..N 
    for (var i=1; i<specialChars.length-1; i++) { 
     plaintextParts.push(str.substr(specialChars[i-1]+2, specialChars[i]-1)); 
    } 
    // last part 
    if (specialChars[specialChars.length-1]+1 < str.length-1) 
     plaintextParts.push(str.substr(specialChars[specialChars.length-2]+2, specialChars[specialChars.length-1]-1)); 

    resultObject.strings = plaintextParts; 
    return resultObject; 
} 

// call function and print output 
var jsonString = "word1 word2 $1 word3 $2 word4 $3"; 
console.log(JSON.stringify(parseJsonString(jsonString))); 
+2

我相信這可以用JS O_o –

+0

的內置正則表達式來完成。 @MatíasFidemraizer這正是如何做到這一點;-) – Neal

回答

1

你可以只使用一個正則表達式:

let str = "word1 word2 $1 word3 $2 word4 $3"; 
let regex = /\$[0-9]/; 
let strSplit = str.split(regex); 
console.log(JSON.stringify(strSplit)); // ["word1 word2 ", " word3 ", " word4 ", ""] 

如果你不希望最後的空字符串,你可以永遠只是S(p)蝨它關閉。

所以,如果你想要的「特殊字符」的數量,你可以只取結果的長度strSplit並減去一。

+0

謝謝。完美無缺地工作! – dragonmnl

+0

還有一件事:因爲我需要兩個字符串(word1 word2,word3,...)和哪裏(即可能有2個特價$ 1,$ 2連續)的特價商品。我怎樣才能跟蹤? – dragonmnl

+0

你是什麼意思?考慮問另一個問題,讓我知道 – Neal

1

就效率而言,這看起來像是一個微型優化,尤其是對於不超過160個字符的字符串。讓代碼以乾淨,可理解的方式工作比優化每個操作的效率更重要。

當談到優化代碼時,請儘量讓您的通用解決方案更高效,然後再優化特定的細節。假設這個函數不存在於真空中,請嘗試關注應用程序本身的性能,並在優化諸如字符串操作之類的東西之前找出實際性能瓶頸的位置。

+0

不成熟的優化是................; D –

相關問題