如何在不分割单词的情况下将字符数限制设置为100? [英] How can I set a character limit of 100 without splitting words?

查看:122
本文介绍了如何在不分割单词的情况下将字符数限制设置为100?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想每100个字符剪一个字符串而不会删掉单词。

  var TmpArray = []; 
var str ='这个字符串将在每100个字符后被删除,但它会切成单词';
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;
//空格将转换为%20(稍后),因此每个空格必须计为3个字符。
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);

输出: [此字符串将在每100个字符后被删除b ,它会切成单词]



那么如何防止它像分裂单词一样?

解决方案

有趣的问题。我将再提出一个如何使用数组方法的实现, split + reduce 的组合:



  var str ='我们要通过空格分割的字符串示例确保单个块大于或等于指定的数量。'; //通过spacesstr.split(/ \s + /)拆分//然后连接单词,使每个字符串部分小于40.reduce(函数(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);});  



对于这个例子,我设定了最大长度输出:

 我们希望39 
按空格分割,只确保40
单个块大于或等于36
指定数量。 17



还有一个演示: http://jsfiddle.net/9tgo6n1t/


I want to cut a string every 100 characters without cutting up words.

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"]

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:

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.

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

One more demo: http://jsfiddle.net/9tgo6n1t/

这篇关于如何在不分割单词的情况下将字符数限制设置为100?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆