2012-10-02 13 views
29

tengo la siguiente cadena:Dividir una cadena, en cada enésima posición, con JavaScript?

foofaafoofaafoofaafoofaafoofaa 

Una matriz con 10 filas (si dividimos por cada personaje tercero, se entiende), que se ve algo como esto, si yo fuera instanciarlo:

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

Así que quiero una función, ya sea integrada o personalizada, que me puede ayudar a dividir una cadena por cada enésimo carácter.

+1

hay una respuesta aquí que hace precisamente eso (http://stackoverflow.com/questions/4017671/how-do-you-split-a-string-at-certain-character -numbers-in-javascript) –

Respuesta

50

Prueba el código de abajo:

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

Para la posición enésima:

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

@xdazz Pero el OP dijo cada enésima posición; su expresión regular está fija en 3. Generalícela para un voto popular. :) –

+0

¿Puedes dividir usando regex pero de derecha a izquierda? – vsync

+2

@vsync: no sé si eso es posible en el caso * general *, pero tal vez podrías invertir la cadena de entrada, hacer las coincidencias y luego invertir la salida. – damd

5

Mientras escribía esto, @xdazz le ocurrió la solución de expresiones regulares maravillosamente simple.

Como usted ha pedido (om los comentarios a esa respuesta) para una solución no regulares, que va a presentar esto de todos modos ...

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

También 'array' no crea un buen nombre de variable. Incluso, el Javascript es sensible a las mayúsculas y minúsculas, puede ser confuso. – 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)

Prints:

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

demostración de trabajo: http://jsfiddle.net/9RXTW/

2

Se puede hacer así:

var input = "foofaafoofaafoofaafoofaafoofaa"; 

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

Demostración: http://jsfiddle.net/Guffa/yAZJ2/

0

Como Mark Walter ha señalado, esta solución de another Stack Overflow question funciona perfectamente:

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

La función seguida de un ejemplo usándola. Las salidas ejemplo de prueba: ["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)); 
Cuestiones relacionadas