2017-01-23 5 views
1

가 일치하는 정규식에 여러 줄의 취득 (말을 공백 무엇-하지 포함 40,000 자)내가 특정 크기의 덩어리로 파일의 내용을 분할하기 위해 노력하고있어

그러나있을 때 나는 배열을 분할 무슨 라인 변경도 원하지 않는 행동입니다. 명확하게 파일에 여러 줄이 비록

 var files = $('#upload').get(0).files; 
     if (files.length > 0) { 
      var reader = new FileReader() 
      reader.onloadend = function() { 
       var content = reader.result 
       var buffer = 40000 
       var contentList = content.match(new RegExp('.{1,' + buffer + '}', 'gm')) 
       console.info('list : ', contentList) 
      } 
      reader.readAsBinaryString(files[0]) 
     } 

추가 질문

, 내가 읽은 파일의 새로운 라인의 아무 표시가 없다는 것을 알 수있다. 나는 \n 같은 것을 놓치고있다.

+0

아마도 [작동하지 않는 자바 스크립트 정규식 여러 플래그 (의 중복 http://stackoverflow.com/questions) 하나의 변수로, 모든 줄 바꿈을 포함하여 전체 파일을 얻을 수 있습니다/1068280/javascript-regex-multiline-flag-doesnt-work); '.' 대신'[\ s \ S]'를 사용하면 어떻게됩니까? – apsillers

+0

@apsillers :'[/ s/S]'를 어떻게 내 RegExp로 변환하겠습니까? –

+0

'새 RegExp ('[\\ s \\ S] {1,'+ 버퍼 + '}', 'gm')'나는 생각합니다. – apsillers

답변

1

UPDATE : 난 그냥 XRegExp 라이브러리가 개행 문자를 캡처 지원하기 위해 무엇을 검토 한 결과, 그것은 매우 간단합니다 : 그것은 단지 문자 클래스 [\s\S]과 (개행 문자를 제외한 모든 일치) 모든 . 문자를 대체, 모든 문자 기간과 일치합니다. \s은 공백 문자 집합과 일치하고 \S (대문자 s)은 \s의 정반대와 정확히 일치하므로이 방법이 효과적입니다. 둘의 합집합을 취하면 일치하지 않는 특성은 없습니다. 그래서, @ capsillers의 제안은 정확합니다. 문자를 일치 시키려면 점을 [\s\S]으로 바꿉니다.


당신이 "한 줄 모드"라고 찾고, 불행하게도하고, 자바 스크립트를 지원하지 않습니다

옵션의 몇 :

  1. 블로그에서 제안한대로 XRegExp 라이브러리를 사용할 수 있습니다.

  2. 당신 수 정규 표현식 매치하기 후에 다시 교체 한 다음 데이터에 표시되지 않습니다 확신하는 유니 코드 코드 포인트로 줄 바꿈을 교체하고, 시도 :

    var input = ...; 
    
    var inputSingleLine = input.replace(/\n/g, "\u27BF"); 
    
    var contentList = inputSingleLine.match(new RegExp('.{1,' + buffer + '}', 'gm')); 
    
    for (var index = 0; index < contentList.length; index++) 
        contentList[index] = contentList[index].replace(/\u27BF/g, "\n"); 
    
    console.info('list : ', contentList); 
    

    (이 당신을 가정을 당신이 일치를 시작하기 전에