2011-09-17 3 views
0

JavaScript 템플릿 파서를 작성 중이며 최종 해결책에 가깝지만 템플릿의 바인딩 블록 (정규 표현식과 일치하는 부분)의 공백을 허용하고 싶습니다. .자바 스크립트 정규 표현식 - 모든 일치 제외

var codeblock = new RegExp("%\{[\S)]+\}%", 'g'); 

그리고처럼 보이는 템플릿 라인 제공 :

<td align="right" style="width: 123px;">%{toFixedEx(#{extendedPrice()}#,2,2)}%</td> 

가 일치 :

%{toFixedEx(#{extendedPrice()}#,2,2)}% 

을 나는 공백을 허용 할 단을

는 지금은 다음이 그리고 %{}% 사이에 줄 바꿈이 있으므로 다음 reg를 시도했습니다. EXP :

var codeblock = new RegExp("%\{[\S\s)]+\}%", 'g'); 

일치 끝 : 경기 무언가 같이

%{toFixedEx(#{surcharge()}#,2 ,4)}%</td> 
<td align="right" style="width: 123px;">%{toFixedEx(#{extendedPrice()}#,2,2)}% 

내가 무엇을 할 수 있기를 원하는 것은 : 경기가 }%에서 끝나는

%{ 
    if (condition) { 
     toFixedEx(#{surcharge()}#,2 ,4) 
    } 
    else { 
     toFixedEx(0,2,4) 
    } 
}% 

대신 계속 템플리트에서 마지막 닫기 중괄호를 사용하십시오. 내가 subtraced 문자 클래스를 시도하지만 그들은 자바 스크립트에서 작동처럼 보이지 않습니다.

답변

2
var codeblock = new RegExp("%\{[\S\s]+?\}%", 'g'); 

+?*? 수단 : 가능한 한 적은 같은 경기는 RE의 다음 부분의 조건을 충족합니다.

또한 [\S\s]은 줄 바꿈을 포함하여 모든 문자와 일치하므로 RE에서 괄호 ())를 제거했습니다.

+0

고마워요, 제가 찾고있는 것이 맞습니다. – dmck

+2

또 다른 노트 (미래의 독자들에게) : 많은 프로그래머들은 가능한 한 많이 일치 할 것으로 기대하는'.'을 사용합니다. '.'은 개행과 일치하지 않습니다. 모든 것을 일치 시키려면''\\ \ \ '\'를 사용해야하는데, "공백이 아닌 모든 문자 * 또는 * 모든 공백 문자"를 의미합니다. –