2012-09-01 2 views
7

pegjs을 사용하여 파서를 만들려고합니다.어떻게 이것을 문법으로 구문 분석합니까?

blah blah START Lorem ipsum 
dolor sit amet, consectetur 
adipiscing elit END foo bar 
etc. 

내가 문제 "START"에서 "END"에 텍스트를 잡기 위해 규칙을 작성하는이 : 내가 좋아하는 뭔가를 구문 분석 할 필요가있다.

답변

10

를 사용하여 부정적 예측 술어 :

phrase 
    =(!"START" .)* "START" result:(!"END" .)* "END" .* { 
    for (var i=0;i<result.length;++i) 
     // remove empty element added by predicate matching 
     {result[i]=result[i][1]; 
     } 
    return result.join(""); 
    } 

당신은 pegjs에서 반복 욕심 때문에 부정적인 END를위한 조건뿐만 아니라 START를 사용해야합니다. 이 쉼표 다음을 병합과 하위 배열을 결합, 즉 것을 (중첩 된 배열을 처리 할 때이 join의하지-반드시 문서화 된 행동에 의존하고 있지만

또는 작업이

{return result.join("").split(',').join("");} 

로 기록 될 수있다 그들).

[업데이트] 빈 요소를 처리하기위한 짧은 방법은

phrase 
    =(!"START" .)* "START" result:(t:(!"END" .){return t[1];})* "END" .* { 
     return result.join(""); 
    } 
+0

감사합니다! !!!!!!!!! –

관련 문제