使用JavaScript在每个第n个位置拆分字符串?

38

我有以下字符串:

foofaafoofaafoofaafoofaafoofaa

如果我按每3个字符分割,会得到一个有10行的数组,如果我实例化它,它看起来会像这样:

var fooarray = new Array ('foo', 'faa', 'foo', 'faa', 'foo', 'faa', 'foo', 'faa', 'foo', 'faa');

我需要一个能够帮助我按每n个字符拆分字符串的函数,可以是内置函数或自定义函数。


1
这里有一个解决方案 (https://dev59.com/7FHTa4cB1Zd3GeqPRGQ7) 可以做到这一点。 - Mark Walters
6个回答

85

尝试以下代码:

var foo = "foofaafoofaafoofaafoofaafoofaa";
console.log( foo.match(/.{1,3}/g) );

对于第n个位置:

foo.match(new RegExp('.{1,' + n + '}', 'g'));

3
但是楼主说的是每个第n个位置;你的正则表达式固定在了3。请将其推广一下以获得点赞 :) - Ray Toal
你能否使用正则表达式从右向左拆分它? - vsync
2
@vsync:我不确定在一般情况下是否可能,但也许您可以先反转输入字符串,进行匹配,然后再反转输出? - damd
太棒了,我的朋友,你对正则表达式的运用非常好。 - SimonC

12

var s = "foofaafoofaafoofaafoofaafoofaa";
var a = [];
var i = 3;

do{ a.push(s.substring(0, i)) } 
while( (s = s.substring(i, s.length)) != "" );

console.log( a )

输出:

foo,faa,foo,faa,foo,faa,foo,faa,foo,faa

工作演示:http://jsfiddle.net/9RXTW/


7

在我写这篇文章的时候,@xdazz提出了一个非常简单的正则表达式解决方案。

但是,由于您已经要求(在对该答案的评论中)提供一个非正则表达式的解决方案,所以我还是会提交这个……

function splitNChars(txt, num) {
  var result = [];
  for (var i = 0; i < txt.length; i += num) {
    result.push(txt.substr(i, num));
  }
  return result;
}
console.log(splitNChars("foofaafoofaafoofaafoofaafoofaa",3));


另外,“array”不是一个好的变量名。尽管JavaScript区分大小写,但这可能会造成混淆。 - clentfort

4
您可以这样做:
var input = "foofaafoofaafoofaafoofaafoofaa";

var result = [];
while (input.length) {
    result.push(input.substr(0, 3));
    input = input.substr(3);
}

Demo: http://jsfiddle.net/Guffa/yAZJ2/


1
正如Mark Walter所指出的那样,另一个Stack Overflow问题中提供的解决方案完美地解决了这个问题:
function splitStringAtInterval (string, interval) {
  var result = [];
  for (var i=0; i<string.length; i+=interval)
    result.push(string.substring (i, i+interval));
  return result;
}

0
函数后跟着一个使用它的示例。示例测试输出为:["abc","def","ghi","j"]
function splitEvery(str, n)
{
    var arr = new Array;
    for (var i = 0; i < str.length; i += n)
    {
        arr.push(str.substr(i, n));
    }
    return arr;
}

var result = splitEvery('abcdefghij', 3);
document.write(JSON.stringify(result));

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