2012-10-02 12 views
29

Mam następujący ciąg:Dziel się łańcuchem na każdej n-tej pozycji z JavaScript?

foofaafoofaafoofaafoofaafoofaa 

tablicę z 10 wierszy (jeśli podzielić przez każdego 3rd znak, że jest), który wygląda mniej więcej tak, gdybym go instancję:

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

Chcę więc funkcji wbudowanej lub niestandardowej, która może mi pomóc podzielić ciąg znaków przez każdą n-tą postać.

+1

Jest odpowiedź tutaj, że właśnie to robi (http://stackoverflow.com/questions/4017671/how-do-you-split-a-string-at-certain-character -numbers-in-javascript) –

Odpowiedz

50

Wypróbuj poniższy kod:

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

Dla n pozycji:

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

@xdazz Ale OP powiedział co n-ta pozycja; twoje wyrażenie regularne jest ustalone na 3. Uogólniaj to dla uprowadzenia. :) –

+0

Czy możesz podzielić to za pomocą wyrażenia regularnego, ale od prawej do lewej? – vsync

+2

@vsync: Nie wiem, czy jest to możliwe w przypadku * ogólnym *, ale może po prostu odwrócić ciąg wejściowy, dopasować, a następnie odwrócić wyjście? – damd

5

Jak pisałem to, @xdazz wymyślił cudownie proste rozwiązanie regex.

Jak można prosić (om komentarzach do tej odpowiedzi) rozwiązania nie regex, będę złożyć to w każdym razie ...

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

Również 'tablica' nie tworzy dobrej nazwy zmiennej. Nawet jeśli JavaScript jest rozróżniana wielkość liter, może to być mylące. – 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)

drukuje:

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

demo robocza: http://jsfiddle.net/9RXTW/

2

Można zrobić tak:

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

Jak Mark Walter zauważył, to rozwiązanie z another Stack Overflow question działa perfekcyjnie:

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

Funkcja, po której następuje przykład z jej użyciem. Wyjścia Przykład testowy: ["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)); 
Powiązane problemy