Você pode fazer algo assim:
"1234567890".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "90"]
O método ainda funcionará com strings cujo tamanho não é um múltiplo exato do tamanho do pedaço:
"123456789".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "9"]
Em geral, para qualquer string da qual você deseja extrair no máximo substrings de tamanho n , você faria:
str.match(/.{1,n}/g); // Replace n with the size of the substring
Se sua string puder conter novas linhas ou retornos de carro, você faria:
str.match(/(.|[\r\n]){1,n}/g); // Replace n with the size of the substring
Quanto ao desempenho, tentei isso com aproximadamente 10k caracteres e demorou um pouco mais de um segundo no Chrome. YMMV.
Isso também pode ser usado em uma função reutilizável:
function chunkString(str, length) {
return str.match(new RegExp('.{1,' + length + '}', 'g'));
}
.
não corresponde à nova linha. Vou atualizar a resposta para que ele leva\n
e\r
em conta.var chunks = str.split("").reverse().join().match(/.{1, 4}/).map(function(s) { return s.split("").reverse().join(); });
. Isso ocorre em partes de 4. Não sei ao certo o que você quer dizer com "menos ou mais". Lembre-se de que isso não funcionará em geral, especialmente com strings que contêm caracteres combinados e também podem quebrar strings Unicode.[^]
. Com isso, seu exemplo resultaria em:str.match(/[^]{1,n}/g)
Eu criei várias variantes mais rápidas que você pode ver no jsPerf . Meu favorito é este:
fonte
Math.ceil()
para determinar o número correto de pedaços.match
,slice
,substr
esubstring
match
eslice
para diferentes tamanhos de chunkmatch
eslice
com tamanho pequeno do pedaçoBottom line:
match
é muito ineficiente,slice
é melhor, no Firefoxsubstr
/substring
é melhor aindamatch
é ainda mais ineficiente para cadeias curtas (mesmo com regex em cache - provavelmente devido ao tempo de configuração da análise de regex)match
é ainda mais ineficiente para um tamanho grande de bloco (provavelmente devido à incapacidade de "pular")match
supera o desempenhoslice
no IE mais antigo, mas ainda perde em todos os outros sistemasfonte
Essa é uma solução rápida e direta -
fonte
substr()
vez desubstring()
.Surpresa! Você pode usar dividir para dividir.
Resulta em
[ '12', '34', '56', '78', '90', ' ' ]
fonte
filter (o=>o)
?filter(x=>x)
é usado para filtrar os elementos vaziosfonte
Eu escrevi uma função estendida, para que o comprimento do pedaço também possa ser uma matriz de números, como [1,3]
O código
retornará:
fonte
Divida a string grande em Pequenas strings de determinadas palavras .
fonte
fonte
Eu usaria um regex ...
fonte
Ligue conforme necessário
fonte
Aqui está uma solução que eu criei para seqüências de caracteres de modelo depois de um pouco de experiência:
Uso:
fonte
Você pode usar
reduce()
sem qualquer regex:fonte
reduce
método.Na forma de uma função de protótipo:
fonte
Aqui está o código que estou usando, ele usa String.prototype.slice .
Sim, é bastante longo para responder, pois tenta seguir os padrões atuais o mais próximo possível e, é claro, contém uma quantidade razoável de comentários do JSDOC . No entanto, uma vez minificado, o código tem apenas 828 bytes e uma vez compactado para transmissão, tem apenas 497 bytes.
O método 1 que isso adiciona
String.prototype
(usando Object.defineProperty, quando disponível) é:Vários testes foram incluídos para verificar a funcionalidade.
Preocupado que o comprimento do código afete o desempenho? Não precisa se preocupar, http://jsperf.com/chunk-string/3
Grande parte do código extra existe para garantir que o código responda da mesma forma em vários ambientes javascript.
fonte
Usando o método slice ():
O mesmo pode ser feito usando o método substring ().
fonte
Meu problema com a solução acima é que ela carrega a corda em pedaços de tamanho formal, independentemente da posição nas frases.
Eu acho que a seguir uma abordagem melhor; embora precise de alguns ajustes no desempenho:
fonte
Você pode definitivamente fazer algo como
para conseguir esta:
Se você deseja inserir / ajustar dinamicamente o tamanho do pedaço, de modo que os pedaços tenham o tamanho n, faça o seguinte:
Para encontrar todos os pedaços possíveis de tamanho n na string original, tente o seguinte:
Você deve terminar com:
fonte
fonte
E esse pequeno pedaço de código:
fonte
fonte