javascript - 在确定大小的数组中拆分字符串而不拆分单词
问题描述
我需要创建能够将较大的字符串拆分为较小字符串的数组但白色拆分单词的函数。就我而言,我有一条超过 5000 个字符的大型短信,我需要拆分为 2048 个字符的字符串。
.
为此,我创建了这个函数(例如,我分成 512 个字符):
var split = function(input, maxCharacter) {
var returnString = "";
var returnArray = [];
var i;
for (i = 0; i < input.length; i++) {
returnString += input[i];
if (returnString.length >= maxCharacter) {
var sav = returnString.length - 1;
var j = returnString.length - 1;
while (returnString[j] !== " " && j > maxCharacter * 0.9) {
returnString = returnString.slice(0, returnString.length - 1);
j = j - 1;
}
returnArray.push(returnString);
returnString = "";
i = i - (sav - j);
}
}
return returnArray;
};
console.log(
split(
`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor rhoncus ex non tristique. Cras in consectetur dui, tincidunt luctus dui. Duis suscipit volutpat ex nec lacinia. Nullam vitae nibh orci. Fusce laoreet fermentum leo eu tincidunt. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed id quam diam. Quisque tempus orci quis nibh pretium luctus. Aenean fermentum, risus at pretium tristique, urna ipsum luctus felis, molestie luctus purus mi vitae ligula. Etiam elementum viverra orci ut maximus. Pellentesque interdum vel leo sed tristique.Integer est ligula, sodales a viverra eget, molestie eget ex. Vivamus hendrerit fermentum magna ac suscipit. Sed vitae sem leo. In eget eleifend sapien. Nunc congue, orci non accumsan placerat, sapien nulla tristique ante, eget dignissim quam diam non ipsum. Aenean lacinia nec erat consequat bibendum. Proin aliquam lobortis sem, ultricies efficitur mi fringilla et. Duis eu venenatis sapien. Nulla iaculis pharetra rhoncus. Suspendisse convallis convallis purus quis imperdiet.`,
512
)
);
解决方案
不是非常快,但非常灵活。
var split = (stringValue, splitChar) => {
const splitBy = splitChar ? splitChar : ' ';
const occuranceMatch = (stringValue.match(new RegExp(splitBy, 'g')) || []);
if (!occuranceMatch) {
return stringValue;
}
const totalSplitByOccurances = occuranceMatch.length;
if (totalSplitByOccurances === 0) {
return stringValue;
}
const start = 0;
let splitIndex = stringValue.indexOf(splitBy);
let tempStringValue = stringValue.slice();
const strings = [];
for (let i = 0; i < totalSplitByOccurances; ++i) {
const value = tempStringValue.substring(start, splitIndex);
strings.push(value.trim());
tempStringValue = tempStringValue.substring(splitIndex + 1, tempStringValue.length).trim();
splitIndex = tempStringValue.indexOf(splitBy);
}
return strings;
}
const string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
console.log(split(string, ','));
// or
console.log(split(string));
推荐阅读
- date - MS CRM - 通过 CRM Webservice 获取错误的日期
- linux - 根据文件名获取两个日期之间的日志
- javascript - 使用 neo4j 查找公交线路中的换乘处
- php - 如何在php中获取url字符串的最后一部分
- .net - IQueryable 返回不一致的结果
- kubernetes - 无法扩展 Sonarqube 部署
- dart - 装饰图像没有被 BoxDecoration 剪裁
- android - 如何在心形可绘制 xml 中添加边框(描边)线
- scala - 在函数中定义 Spark 转换并在 BigData 中返回新数据帧是否安全?
- angular - 角度数组数据绑定