2011-09-17 107 views
0
之外的所有內容

我在寫一個JavaScript模板解析器,並且我接近最終解決方案,但是我想允許我的模板的綁定塊中的空白(我與正則表達式匹配) 。JavaScript正則表達式 - 匹配除

現在,我有以下幾點:

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

,並給予模板線,看起來像:

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

將匹配:

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

但是我想允許空白並在%{}%之間換行,所以我嘗試了以下注冊表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) 
    } 
}% 

當比賽在}%結束,而不是繼續直到模板中的最後一個右大括號。我嘗試了減法字符類,但它看起來不像在JavaScript中工作。

回答

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

+?*?手段:匹配儘可能少,以滿足RE的下一部分的狀態。

我也從您的RE中刪除了括號),因爲[\S\s]匹配每個字符(包括換行符)。

+0

謝謝,正是我在找的東西。 – dmck

+2

另一個說明(對未來的讀者):許多程序員使用'.',期望儘可能匹配。不過,'.'與換行符不匹配。要匹配所有內容,應該使用'[\ S \ s]',這意味着「任何非空白字符*或*任何空格字符」。 –