[英]How can I set a character limit of 100 without splitting words?
I want to cut a string every 100 characters without cutting up words. 我想每100个字符切一个字符串而不切掉单词。
var TmpArray=[];
var str = 'this string will be cut up after every 100 characters but it will cut into words';
str=str.replace(/[^a-z A-Z0-9]+/g, '');
str = str.replace(/\s{2,}/g, ' ');
var sp=(str.match(new RegExp(" ", "g")) || []).length;
var max=100;
//Spaces will be converted into %20 (later) so each space must count as 3 characters.
var FoundSpaces=sp*3;
var tmp=max-FoundSpaces;
var cut=str.match(new RegExp('.{1,'+tmp+'}', 'g'));
for (i = 0; i < cut.length; i++){
TmpArray.push(cut[i]);
}
console.log(TmpArray);
Output: ["this string will be cut up after every 100 characters b", "ut it will cut into words"]
输出: ["this string will be cut up after every 100 characters b", "ut it will cut into words"]
So how can I prevent it from splitting words like it did? 那么如何防止它像以前那样分裂单词呢?
Interesting question. 有趣的问题。 I will propose one more implementation of how you can use just array methods, combination of split
+ reduce
: 我将提出另一种实现方法,说明如何使用数组方法以及split
+ reduce
组合:
var str = 'This example of the string that we want to split by spaces only making sure that individual chunk is less or equal to specified number.'; // Split by spaces str.split(/\\s+/) // Then join words so that each string section is less then 40 .reduce(function(prev, curr) { if (prev.length && (prev[prev.length - 1] + ' ' + curr).length <= 40) { prev[prev.length - 1] += ' ' + curr; } else { prev.push(curr); } return prev; }, []) // Print for testting .forEach(function(str) { console.log(str + ' ' + str.length); });
For this example I set maximum length of 40 characters. 对于此示例,我将最大长度设置为40个字符。
Output: 输出:
This example of the string that we want 39
to split by spaces only making sure that 40
individual chunk is less or equal to 36
specified number. 17
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.