Comme le titre l'indique, j'ai une chaîne et je veux diviser en segments de n caractères.
Par exemple:
var str = 'abcdefghijkl';
après un peu de magie avec n=3
, il deviendra
var arr = ['abc','def','ghi','jkl'];
Y a-t-il un moyen de faire cela?
[\s\S]
plutôt.
que pour ne pas échouer sur les nouvelles lignes.''.match(/.{1,3}/g)
et''.match(/.{3}/g)
reveneznull
au lieu d'un tableau vide.Si vous ne vouliez pas utiliser une expression régulière ...
jsFiddle .
... sinon la solution regex est plutôt bonne :)
la source
3
variable est comme suggéré par l'OP. C'est plus lisible que de concaténer une chaîne d'expression régulière.la source
3
moi mais revientnull
avec250
. 🤔S'appuyant sur les réponses précédentes à cette question; la fonction suivante divisera une chaîne (
str
) n-nombre (size
) de caractères.Démo
la source
Ma solution (syntaxe ES6):
Nous pourrions même créer une fonction avec ceci:
Ensuite, vous pouvez appeler la fonction facilement de manière réutilisable:
À votre santé
la source
Solution propre sans REGEX
la source
La fonction ci-dessus est ce que j'utilise pour le découpage en Base64. Cela créera un saut de ligne de 75 caractères.
la source
replace(/.{1,75}/g, '$&\n')
.Ici, nous entrecoupons une chaîne avec une autre chaîne tous les n caractères:
si nous utilisons ce qui précède ainsi:
on a:
et ici nous faisons de même, mais poussons vers un tableau:
puis exécutez-le:
on a:
si quelqu'un connaît un moyen de simplifier le code ci-dessus, lmk, mais cela devrait fonctionner correctement pour les chaînes.
la source
Une solution propre sans utiliser d'expressions régulières:
Exemple d'utilisation - https://jsfiddle.net/maciejsikora/b6xppj4q/ .
J'ai également essayé de comparer ma solution à l'expression rationnelle qui a été choisie comme bonne réponse. Un test peut être trouvé sur jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/ . Les tests montrent que les deux méthodes ont des performances similaires, peut-être qu'à première vue, la solution d'expression régulière est un peu plus rapide, mais jugez-en vous-même.
la source
Avec
.split
:et
.replace
sera:/(?!$)/
est d'arrêter avant la fin/$/
, sans est:ignorer le groupe
/(?:
...)/
n'est pas nécessaire dans.replace
mais.split
ajoute des groupes à arr:la source
Voici un moyen de le faire sans expressions régulières ni boucles explicites, bien qu'il étende un peu la définition d'une ligne:
Il fonctionne en divisant la chaîne en un tableau de caractères individuels, puis en utilisant
Array.reduce
pour itérer sur chaque caractère. Normalement,reduce
il retournerait une seule valeur, mais dans ce cas, la seule valeur se trouve être un tableau, et lorsque nous passons sur chaque caractère, nous l'ajoutons au dernier élément de ce tableau. Une fois que le dernier élément du tableau atteint la longueur cible, nous ajoutons un nouvel élément de tableau.la source
Venant un peu plus tard à la discussion, mais voici une variation un peu plus rapide que le push sous-chaîne + tableau.
Le pré-calcul de la valeur finale dans le cadre de la boucle for est plus rapide que le calcul en ligne à l'intérieur de la sous-chaîne. Je l'ai testé à la fois dans Firefox et Chrome et ils montrent tous les deux une accélération.
Vous pouvez l'essayer ici
la source