web-dev-qa-db-fra.com

Fractionner une chaîne, à chaque nième position, avec JavaScript?

J'ai la chaîne suivante:

foofaafoofaafoofaafoofaafoofaa

Un tableau de 10 lignes (si je scinde tous les 3 caractères), qui ressemble à ceci, si je l'instanciais:

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

Je souhaite donc une fonction, intégrée ou personnalisée, qui puisse m'aider à scinder une chaîne par chaque nième caractère.

35
think123

Essayez le code ci-dessous:

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

Pour la nième position:

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

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 )

Impressions:

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

Démo de travail: http://jsfiddle.net/9RXTW/

11
sp00m

Alors que j'écrivais ceci, @xdazz a proposé la solution de regex merveilleusement simple.

Comme vous avez demandé (avec les commentaires à cette réponse) une solution non-regex, je le soumettrai quand même ...

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);

Démo JSFiddle

5
freefaller

Vous pouvez faire comme ça:

var input = "foofaafoofaafoofaafoofaafoofaa";

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

Démo: http://jsfiddle.net/Guffa/yAZJ2/

2
Guffa

Comme Mark Walter l'a souligné, cette solution de une autre question de Stack Overflow fonctionne parfaitement:

function splitStringAtInterval (string, interval) {
  var result = [];
  for (var i=0; i<string.length; i+=interval)
    result.Push(string.substring (i, i+interval));
  return result;
}
1
think123

La fonction suivie d'un exemple d'utilisation. Les exemples de résultats de test: ["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));
0
sarahg