Javascript:在最后一个特定字符后剪切字符串

时间:2014-08-25 19:32:12

标签: javascript arrays string

我正在做一些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;
}

4 个答案:

答案 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('')