2012-05-06 3 views
5

문자열을 고정 길이 (예 : N) 개로 분할하고 싶습니다. 물론 원래 문자열의 길이가 N의 배수가 아닌 경우 마지막 부분이 짧아 질 수 있습니다.자바 스크립트 문자열을 고정 길이로 분할

가장 빠른 방법이 필요하지만 작성하는 것이 가장 간단합니다. 내가 지금까지 해왔 던 방식은 다음과 같다.

var a = 'aaaabbbbccccee'; 
var b = []; 
for(var i = 4; i < a.length; i += 4){ // length 4, for example 
    b.push(a.slice(i-4, i)); 
} 
b.push(a.slice(a.length - (4 - a.length % 4))); // last fragment 

나는 원하는 것을하기위한 더 좋은 방법이 있어야한다고 생각한다. 하지만 추가 모듈이나 라이브러리는 필요하지 않습니다. 가능한 경우 JavaScript 만 사용하면됩니다.

질문하기 전에 다른 언어를 사용하여이 문제를 해결할 수있는 몇 가지 방법을 살펴 보았지만 JavaScript로 염두에 두지 않았습니다.

+0

당신은 정말 그냥 함수 호출을 방지하기 위해 모든 것을 매번 쓰기합니까? – Esailija

+0

가장 빠른 코드 실행 및 구현의 단순성을 가질 수 있다고 생각합니까? 그 두 가지 특성은 종종 경쟁합니다. –

+1

다음은 또 다른 구현이지만 여전히 여러분과 매우 유사합니다. http://phpjs.org/functions/str_split:530 – Niko

답변

17

이 작업을 시도 할 수 있습니다 :

var a = 'aaaabbbbccccee'; 
var b = a.match(/(.{1,4})/g); 
+1

매우 간단합니다! 나는 그것을 좋아한다! 그러나 fixed-lenght가 32 인 경우 어떻게됩니까? 나는'/ (. {32} |. {31} |. {30} ... |. {2} |.)/g'라고 써야합니다. 너무 텍스트! – sgmonda

+2

더 짧다 :'a.match (/ (. {1,4})/g); – Niko

+0

모든 문자를 포함하기 때문에'[\ S \ s]'또는'.'를 사용할 수있다. – Esailija

4

이 관련 질문을 참조하십시오 : (. 성능이 문제가되는 경우 주석의 성능 테스트를 참조하십시오) https://stackoverflow.com/a/10456644/711085https://stackoverflow.com/a/8495740/711085

첫 번째 (느린) 링크 :

[].concat.apply([], 
    a.split('').map(function(x,i){ return i%4 ? [] : a.slice(i,i+4) }) 
) 

문자열 프로토 타입으로 :

String.prototype.chunk = function(size) { 
    return [].concat.apply([], 
     this.split('').map(function(x,i){ return i%size ? [] : this.slice(i,i+size) }, this) 
    ) 
} 

데모 :

> '123412341234123412'.chunk(4) 
["1234", "1234", "1234", "1234", "12"] 
+0

이제 정규 표현식에서'/ (. {32} |.. {31} |. {30} '을 쓸 필요가 없습니다. .......... |. {2} |.)/g', 매우 간결하기 때문에 그 대답을 추천해야합니다. =)이 솔루션은 청킹 배열에만 적합합니다. – ninjagecko

+0

동일한 문제는 완벽하지만 배열에 적용됩니다. 고맙습니다! 문자열 분리의 경우 위의 솔루션을 선호합니다. – sgmonda

+0

이 비교에 관심이 있으실 것입니다 : http://jsperf.com/chunk-methods –

관련 문제