我正在做一些Javascript来将字符串剪切成140个字符,而不会破坏文字和内容,但现在我想要文本所以有一些意义。所以我想如果你找到一个字符(就像。,,,,,,等),如果字符串是> 110个字符并且< 140然后将它切片,那么文本就更有意义了。这就是我所做的: 其中texto表示文本,纵向表示长度,arrayDeTextos表示ArrayText。 谢谢。
//function to cut strings
function textToCut(texto, longitud){
if(texto.length<longitud) return texto;
else {
var cortado=texto.substring(0,longitud).split(' ');
texto='';
for(key in cortado){
if(key<(cortado.length-1)){
texto+=cortado[key]+' ';
if(texto.length>110 && texto.length<140) {
alert(texto);
}
}
}
}
return texto;
}
function textToCutArray(texto, longitud){
var arrayDeTextos=[];
var i=-1;
do{
i++;
arrayDeTextos.push(textToCut(texto, longitud));
texto=texto.replace(arrayDeTextos[i],'');
}while(arrayDeTextos[i].length!=0)
arrayDeTextos.push(texto);
for(key in arrayDeTextos){
if(arrayDeTextos[key].length==0){
delete arrayDeTextos[key];
}
}
return arrayDeTextos;
}
答案 0 :(得分:0)
将字符串分解为句子,然后在附加每个句子之前检查最终字符串的长度。
var str = "Test Sentence. Test Sentence";
var arr = str.split(/[.,;:]/) //create an array of sentences delimited by .,;:
var final_str = ''
for (var s in arr) {
if (final_str.length == 0) {
final_str += arr[s];
} else if (final_str.length + s.length < 140) {
final_str += arr[s];
}
}
alert(final_str); // should have as many full sentences as possible less than 140 characters.
答案 1 :(得分:0)
我认为Martin Konecny的解决方案效果不佳,因为它排除了分隔符,因此从文本中删除了很多意义。
这是我的解决方案:
var arrTextChunks = text.split(/([,:\?!.;])/g),
finalText = "",
finalTextLength = 0;
for(var i = 0; i < arrTextChunks.length; i += 2) {
if(finalTextLength + arrTextChunks[i].length + 1 < 140) {
finalText += arrTextChunks[i] + arrTextChunks[i + 1];
finalTextLength += arrTextChunks[i].length;
} else if(finalTextLength > 110) {
break;
}
}
http://jsfiddle.net/Whre/3or7j50q/3/
我知道i += 2
部分只对标点符号(单点,冒号等)的“常见”用法有意义,而且没有“喜欢!!!?!?1” !1!”
答案 2 :(得分:0)
如果没有正则表达式分割,应该会更有效。
var truncate = function (str, maxLen, delims) {
str = str.substring(0, maxLen);
return str.substring(0, Math.max.apply(null, delims.map(function (s) {
return str.lastIndexOf(s);
})));
};
答案 3 :(得分:0)
尝试使用此正则表达式,您可以在此处查看其工作原理:http://regexper.com/#%5E(%5Cr%5Cn%7C.)%7B1%2C140%7D%5Cb
str.match(/^(\r\n|.){1,140}\b/g).join('')