2017-08-01 215 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);