2012-10-02 95 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)); 
相關問題