242 votes

Manière élégante de Javascript de diviser la chaîne en segments n caractères longs

Comme le titre l'indique, j'ai une chaîne et je veux me séparer en segments de n caractères.

Par exemple:

 var str = 'abcdefghijkl';
 

après un peu de magie avec n = 3, deviendra

 var arr = ['abc','def','ghi','jkl'];
 

Y a-t-il une manière élégante de faire ceci?

432voto

Box9 Points 41987
str.match(/.{1,3}/g)

Remarque: Utiliser {1,3} au lieu de simplement en {3} d'inclure le reste pour les longueurs de chaîne qui ne sont pas un multiple de 3, e.g:

"abcd".match(/.{1,3}/g); // ["abc", "d"]

Un couple de plus de subtilités:

  1. Si votre chaîne peut contenir des sauts de ligne (dont vous voulez compter comme un personnage plutôt que le fractionnement de la chaîne), puis l' . de ne pas capturer les. Utiliser /[\s\S]{1,3}/ à la place. (Merci @Mike).
  2. Si votre chaîne est vide, alors match() sera de retour null lorsque vous attend peut-être un tableau vide. Protéger contre cette en ajoutant || [].

Donc, vous pouvez vous retrouver avec:

var parts = str.match(/[\s\S]{1,3}/g) || [];

59voto

alex Points 186293

Si vous ne voulez pas utiliser une expression régulière ...

 var chunks = [];

for (var i = 0, charsLength = str.length; i < charsLength; i += 3) {
    chunks.push(str.substring(i, i + 3));
}
 

jsFiddle .

... sinon la solution regex est très bonne :)

25voto

maerics Points 47743
str.match(/.{3}/g); // => ['abc', 'def', 'ghi', 'jkl']

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X