2017-08-01 97 views
0

我需要將JavaScript中的字符串拆分爲不超過100個字符的塊,同時保留單詞之間的中斷。我在自己的個人圖書館中有一個函數,用於將一個字符串分塊爲100個字符的分段,但似乎無法將我的頭圍繞如何適應它,以避免在字詞中間分裂。我認爲可以使用正則表達式或其他東西來管理某些內容,但它並不適合我。對於任何解決方案的一個警告是它必須是純粹的JavaScript,而不是jQuery,而且環境無法訪問與瀏覽器相關的全局變量。將字符串分解成JavaScript中的最大字符部分

- 編輯 -

好吧,我已經寫了一些代碼,但我得到了奇怪的結果...

function chunkify(str) { 
    var wsRegEx = /\S/; 
    var wsEndRegEx = /\s$/; 
    var wsStartRegEx = /^\s/; 
    var chunks = new Array(); 
    var startIndex = 0; 
    var endIndex = 100; 
    var totalChar = 0; 
    while (true) { 
     if (totalChar >= str.length) break; 
     var chunk = str.substr(startIndex,endIndex-startIndex); 
     while (wsStartRegEx.test(chunk)) { 
      startIndex++; 
      endIndex++; 
      totalChar++; 
      chunk = str.substr(startIndex,endIndex-startIndex); 
     } 
     if (!wsEndRegEx.test(chunk)) { 
      while (wsRegEx.test(chunk.charAt(endIndex))) { 
       endIndex--; 
      } 
      chunk = str.substr(startIndex,endIndex-startIndex); 
     } 
     chunks.push(chunk); 
     totalChar += chunk.length; 
     startIndex = endIndex; 
     endIndex += 100; 
    } 
    return chunks; 
} 

先前版本我張貼了不算大塊正確,但這個版本,似乎正確地打破,現在打破中間詞。

- 編輯#2 -

我想我現在工作的偉大。這似乎這樣的伎倆:

function chunkify(str) { 
    var wsRegEx = /\S/; 
    var chunks = new Array(); 
    var startIndex = 0; 
    var endIndex = 100; 
    while (startIndex < str.length) { 
     while (wsRegEx.test(str.charAt(endIndex))) { 
      endIndex--; 
     } 
     if (!wsRegEx.test(str.charAt(startIndex))) 
      startIndex++; 
     chunks.push(str.substr(startIndex, endIndex - startIndex)); 
     startIndex = endIndex; 
     endIndex += 100; 
    } 
    return chunks; 
} 

有一個更清潔的方式來做到這一點,或者我已經得到了這是約高效,因爲它會得到什麼?

+0

有什麼你試過至今?任何代碼? – Vandesh

回答

0

我試圖符合規範這一點你,等你明白一個辦法是可以做到的

function chunkify (str) { 
    var chunks = []; 
    var startIdx = 0, endIdx; 
    //Traverse through the string, 100 characters at a go 
    //If the character in the string after the next 100 (str.charAt(x)) is not a whitespace char, try the previous character(s) until a whitespace character is found. 
    //Split on the whitespace character and add it to chunks 
    return chunks 
} 
+0

這實質上是在do/while循環中處理嗎? –

+0

@MichaelMcCauley可能。您將需要使用循環機制,其中有幾個在JavaScript和jQuery – ControlAltDel

+0

不能使用jQuery,在工作環境中不可用。幾乎看起來這可能最有可能是一對嵌套循環。一個循環來處理整體結構,一個內循環沿着字符串向後滑動以找到最後一個空白字符。 –

0

這裏是一種用正則表達式來做到這一點:

chunks = str.match(/.{1,100}/g);