2012-10-02 31 views
29

Tôi có chuỗi sau:Tách một chuỗi, ở mọi vị trí thứ n, bằng JavaScript?

foofaafoofaafoofaafoofaafoofaa 

Một mảng với 10 dòng (nếu tôi chia bởi mỗi nhân vật thứ 3, đó là), mà trông giống như thế này, nếu tôi được nhanh chóng nó:

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

Vì vậy, tôi muốn một hàm, được tích hợp sẵn hoặc được tạo tùy chỉnh, có thể giúp tôi chia chuỗi bằng mọi ký tự thứ n.

+1

Có một câu trả lời ở đây là không chỉ đó (http://stackoverflow.com/questions/4017671/how-do-you-split-a-string-at-certain-character -numbers-in-javascript) –

Trả lời

50

Hãy thử đoạn code dưới đây:

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

Đối với vị trí thứ n:

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

@xdazz Nhưng OP cho biết mọi vị trí thứ n; regex của bạn là cố định tại 3. Tổng quát nó cho một upvote. :) –

+0

Bạn có thể chia nó bằng regex nhưng từ phải sang trái? – vsync

+2

@vsync: Tôi không biết nếu có thể trong trường hợp * chung *, nhưng có lẽ bạn chỉ có thể đảo ngược chuỗi đầu vào, thực hiện các kết quả phù hợp, sau đó đảo ngược đầu ra? – damd

5

Khi tôi đang viết những dòng này, @xdazz đã đưa ra các giải pháp regex đơn giản tuyệt vời.

Như bạn đã yêu cầu (om các ý kiến ​​để trả lời đó) cho một giải pháp không regex, tôi sẽ đệ trình này anyway ...

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

Cũng 'mảng' không làm cho một tên biến tốt. Thậm chí nghĩ Javascript là trường hợp nhạy cảm nó có thể gây nhầm lẫn. – 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)

Bản in:

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

bản demo làm việc: http://jsfiddle.net/9RXTW/

2

Bạn có thể làm như thế này:

var input = "foofaafoofaafoofaafoofaafoofaa"; 

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

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

0

Như Mark Walter đã chỉ ra, giải pháp này từ another Stack Overflow question công trình hoàn hảo:

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

Chức năng theo sau là một ví dụ sử dụng nó. Các kết quả thử nghiệm ví dụ: ["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)); 
Các vấn đề liên quan