Como o título diz, eu tenho uma string e quero dividir em segmentos de n caracteres.
Por exemplo:
var str = 'abcdefghijkl';
depois de um pouco de magia n=3
, ele se tornará
var arr = ['abc','def','ghi','jkl'];
Existe uma maneira de fazer isso?
javascript
arrays
string
split
Ben
fonte
fonte
[\s\S]
vez de.
para não falhar em novas linhas.''.match(/.{1,3}/g)
e''.match(/.{3}/g)
retorne emnull
vez de uma matriz vazia.Se você não quis usar uma expressão regular ...
jsFiddle .
... caso contrário, a solução regex é muito boa :)
fonte
3
for variável conforme sugerido pelo OP. É mais legível do que concatenar uma string regexp.fonte
3
mim, mas retornanull
com250
. 🤔Com base nas respostas anteriores a esta pergunta; a seguinte função dividirá uma string (
str
) n-number (size
) de caracteres.Demo
fonte
Minha solução (sintaxe ES6):
Poderíamos até criar uma função com isso:
Em seguida, você pode chamar a função facilmente de maneira reutilizável:
Felicidades
fonte
Solução limpa sem REGEX
fonte
A função acima é o que eu uso para chunking Base64. Ele criará uma quebra de linha com 75 caracteres.
fonte
replace(/.{1,75}/g, '$&\n')
.Aqui, intercalamos uma string com outra string a cada n caracteres:
se usarmos o acima descrito assim:
Nós temos:
e aqui fazemos o mesmo, mas pressionamos para uma matriz:
e execute-o:
Nós temos:
se alguém souber uma maneira de simplificar o código acima, lmk, mas deve funcionar bem para strings.
fonte
Alguma solução limpa sem usar expressões regulares:
Exemplo de uso - https://jsfiddle.net/maciejsikora/b6xppj4q/ .
Eu também tentei comparar minha solução para regexp uma que foi escolhida como resposta certa. Alguns testes podem ser encontrados no jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/ . Os testes estão mostrando que os dois métodos têm desempenho semelhante; talvez, à primeira vista, a solução regexp seja um pouco mais rápida, mas julgue você mesmo.
fonte
Com
.split
:e
.replace
será:/(?!$)/
é parar antes do final/$/
, sem é:ignorando o grupo
/(?:
...)/
não é necessário,.replace
mas.split
está adicionando grupos ao arr:fonte
Aqui está uma maneira de fazê-lo sem expressões regulares ou loops explícitos, embora esteja ampliando um pouco a definição de um liner:
Ele funciona dividindo a cadeia de caracteres em uma matriz de caracteres individuais e, em seguida, usando
Array.reduce
para iterar sobre cada caractere. Normalmentereduce
, retornaria um valor único, mas, nesse caso, o valor único passa a ser uma matriz, e conforme passamos sobre cada caractere, o anexamos ao último item dessa matriz. Quando o último item da matriz atingir o comprimento desejado, anexamos um novo item.fonte
Chegando um pouco mais tarde à discussão, mas aqui uma variação é um pouco mais rápida que a substring + array.
Pré-calcular o valor final como parte do loop for é mais rápido do que fazer a matemática embutida na substring. Eu testei no Firefox e no Chrome e ambos mostram aceleração.
Você pode tentar aqui
fonte