【发布时间】:2017-08-01 17:37:54
【问题描述】:
我需要将 JavaScript 中的字符串分成不超过 100 个字符的块,同时保持单词之间的中断。我在自己的个人库中有一个函数可以将字符串分块成 100 个字符的部分,但我似乎无法理解如何调整它以避免在单词中间分裂。我认为可以使用正则表达式或其他东西来管理某些东西,但它并没有出现在我身上。对任何解决方案的一个警告是,它必须是纯 JavaScript,而不是 jQuery,并且环境无法访问与浏览器相关的全局变量。
-- 编辑--
好的,我已经写了一些代码,但是我得到了奇怪的结果......
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;
}
有没有更清洁的方法来做到这一点,或者我是否让它尽可能高效?
【问题讨论】:
-
到目前为止你都尝试过什么?有代码吗?
标签: javascript string