我想把一个非常大的字符串(比如10,000个字符)分割成n大小的块。

就性能而言,最好的方法是什么?

例如: "1234567890"除以2将变成["12","34","56","78","90"]。

使用string。prototype。match可以实现这样的事情吗如果可以,从性能来看,这是最好的方式吗?


当前回答

你可以这样做:

"1234567890".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "90"]

如果字符串的大小不是chunk-size的倍数,该方法仍然有效:

"123456789".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "9"]

一般来说,对于任何你想要提取最多n个子字符串的字符串,你可以这样做:

str.match(/.{1,n}/g); // Replace n with the size of the substring

如果你的字符串可以包含换行符或回车,你会这样做:

str.match(/(.|[\r\n]){1,n}/g); // Replace n with the size of the substring

至于性能,我用了大约10k个字符,在Chrome上花了一秒钟多一点的时间。YMMV。

这也可以用在可重用函数中:

function chunkString(str, length) {
  return str.match(new RegExp('.{1,' + length + '}', 'g'));
}

其他回答

function chunkString(str, length = 10) {
    let result = [],
        offset = 0;
    if (str.length <= length) return result.push(str) && result;
    while (offset < str.length) {
        result.push(str.substr(offset, length));
        offset += length;
    }
    return result;
}

那么下面这一小段代码呢:

function splitME(str, size) {
    let subStr = new RegExp('.{1,' + size + '}', 'g');
    return str.match(subStr);
};

你可以这样做:

"1234567890".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "90"]

如果字符串的大小不是chunk-size的倍数,该方法仍然有效:

"123456789".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "9"]

一般来说,对于任何你想要提取最多n个子字符串的字符串,你可以这样做:

str.match(/.{1,n}/g); // Replace n with the size of the substring

如果你的字符串可以包含换行符或回车,你会这样做:

str.match(/(.|[\r\n]){1,n}/g); // Replace n with the size of the substring

至于性能,我用了大约10k个字符,在Chrome上花了一秒钟多一点的时间。YMMV。

这也可以用在可重用函数中:

function chunkString(str, length) {
  return str.match(new RegExp('.{1,' + length + '}', 'g'));
}

我会用正则表达式…

var chunkStr = function(str, chunkLength) {
    return str.match(new RegExp('[\\s\\S]{1,' + +chunkLength + '}', 'g'));
}

它将大字符串拆分为给定单词的小字符串。

function chunkSubstr(str, words) {
  var parts = str.split(" ") , values = [] , i = 0 , tmpVar = "";
  $.each(parts, function(index, value) {
      if(tmpVar.length < words){
          tmpVar += " " + value;
      }else{
          values[i] = tmpVar.replace(/\s+/g, " ");
          i++;
          tmpVar = value;
      }
  });
  if(values.length < 1 &&  parts.length > 0){
      values[0] = tmpVar;
  }
  return values;
}