2012-10-02 41 views
29

我有以下字符串:用JavaScript分割一个字符串,在每个第n个位置?

foofaafoofaafoofaafoofaafoofaa 

10行(如果我分裂每隔3个字符,这是)一个数组,它看起来这样的事情,如果我要实例化它:

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

所以我想要一个内置或定制的函数,它可以帮助我分割每个字符的第n个字符。

+1

这里有一个答案,不只是那(http://stackoverflow.com/questions/4017671/how-do-you-split-a-string-at-certain-character -numbers-in-javascript) –

回答

50

试试下面的代码:

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

对于第n个位置:

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

@xdazz但OP表示每第n个位置;你的正则表达式固定为3.将其推广为upvote。 :) –

+0

你可以使用正则表达式分割它,但从右到左? – vsync

+2

@vsync:我不知道这是否可能在* general *的情况下,但也许你可以反转输入字符串,做匹配,然后扭转输出? – damd

5

当我写这个,@xdazz想出了非常简单的正则表达式的解决方案。

正如你所问(OM的意见,这个问题的答案)的非正则表达式的解决方案,我会提交此反正...

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

splitNChars("foofaafoofaafoofaafoofaafoofaa",3); 

JSFiddle Demo

+0

也'数组'没有一个好的变量名称。即使认为Javascript是区分大小写的,它可能会让人困惑。 – clentfort

11

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/

2

你可以这样做:

var input = "foofaafoofaafoofaafoofaafoofaa"; 

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

演示:http://jsfiddle.net/Guffa/yAZJ2/

0

正如马克·沃尔特指出,从another Stack Overflow question作品完美此解决方案:

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)); 
相关问题