JavaScript - 如何在每X个字符处分割字符串?

12

如何在每X个字符处分割一个字符串?例如,我想在每1000个字符处分割一个非常长的随机字符串。

var string = <我的文本字符串,长度为数千个字符>


分解它们并对部分进行什么操作?将它们包裹在某些东西中吗?将它们添加到数组或变量中? - David Thomas
不需要,只需将它们作为POST发送,然后我会在后端将它们拼接起来。 - James Nine
你可以在对字符串长度和你的数量x取模之后,使用substring()函数来确定分割的次数。 - user17753
可能有哪些字符?正则表达式在大块文本上可能会变慢。 - Erik Reppen
任何字符都有可能,可能是类似于十六进制值或HTML代码的东西,但如果发生这种情况,我会对HTML代码进行URL编码。 - James Nine
6个回答

16
你可以使用 正则表达式
'asdfasdfasdfasdf'.match(/.{3}|.{1,2}/g); // 'asd', 'fas', etc.

当然,将3替换为1000。

这是一个牵强的例子:http://jsfiddle.net/ReRPz/1/


作为一个函数:

function splitInto(str, len) {
    var regex = new RegExp('.{' + len + '}|.{1,' + Number(len-1) + '}', 'g');
    return str.match(regex );
}

如果您有一个固定数量的项目需要拆分,那么只需要一次创建RegExp即可。

如果可以避免的话,不要在大文本块中使用“。”。这将导致你反复检查除了3个不常见的空白字符之外的所有字符1000次。 - Erik Reppen

2

尝试使用这个函数:

function getParts(str, len)
{
    var res = [];
    ​while (str.length) {
        res.push(str.substring(0, len));
        str = str.substring(len);
    }
    return res;
}
var s = "qweasedzxcqweasdxzc12";
console.log(getParts(s, 10));


1

像这样:

var myString = "my text string that is thousands of characters long";
var myCurrentString = "";
var myBrokenUpString = new Array();

for(var i = 0; i < myString.length; i++) {
    myCurrentString += myString.charAt(i);

    if(i % 1000 == 0) {
        myBrokenUpString.push(myCurrentString);
        myCurrentString = "";
    }

    if(i + 1 == myString.length) myBrokenUpString.push(myCurrentString);
}

请注意,上述代码未经测试,可能包含错误。
然后,您可以将数组进行POST并在另一端重新组合。拼接代码应该类似于这样:
var myRestoredString = "";
for(var i = 0; i<myBrokenUpString.length; i++)  {
    myRestoredString += myBrokenUpString[i];
}

1
我会在字符串上使用子字符串函数。
     str = //the given string
     arr = [];

     for(i=0;i<str.length;i+=1000)
     {
        s = i;
        // if the last string is less than 1000chars
        e = (str.length - i) > 1000 ? (i+1000) : (str.length - i); 
        arr.push = str.substring(s,e);
     }

1
这是一种递归的方法:
var string = "my text string that is thousands of characters long";

var arr = [];

function div( str, len ) {

    if( str.length < len )
        return arr.push(str);
    else
        arr.push(str.substring(0,len))

    div( str.substring(len), len );
}

div( string, 5 );

for( var i = 0; i < arr.length; i++ ) {
    document.write( arr[i] + "<br/>");  
}

/* output:

my te
xt st
ring 
that 
is th
ousan
ds of
char
acter
s lon
g


*/

0
借鉴Joe Tuskan的想法:
var str = 'asdfasdfasdfasdf';
var len = 3;
var regex = new RegExp(".{"+len+"}", "g");
var trail = str.length - (str.length % len);

var parts = str.match(regex);
parts.push(str.substring(trail));

document.write(parts.join('<br>'));

http://jsfiddle.net/6aSHB/1/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接