2012-02-01 41 views
0

我正在爲我正在構建的網站使用javascript模板系統,而​​且我遇到了一些問題。Javascript正則表達式模板:只有當括號內的字符串相等時才匹配

我用下面的正則表達式來匹配我的字符串中的段:

/(\{\{(#|\^)(.*?)\?\}\}(.*?)\{\{\/(.*?)\?\}\})/ 

飼養這樣的字符串,如:

{{#is_user?}} The user is an user {{/user?}} 

雖然指出「用戶」 =真,顯示串。當「is_user」設置爲false時,字符串不顯示。但是我發現,這使得沒有空間嵌套這樣認爲:

{{#is_user?}} The user is an user {{#has_picture?}} and has a picture{{/has_picture?}} {{/user?}} 

這將導致如下:

The user is an user {#is_user?}} The user is an user{{/user?}} 

因此這意味着比賽被{{#is_user之間發現了什麼? }}和{{/ has_picture?}},因爲正則表達式只是檢查{{#anystring?}}和{{/ anystring? }}。

現在我的問題是如果有可能只有一個匹配,如果括號之間的兩個字符串是相等的,所以只有在{{#stirngA?}} {{/ stringA?}}時才能找到匹配。

回答

2

通過使用反向引用,您可以使您的正則表達式僅匹配相應的開始標記。

例如爲:

/(\{\{(#|\^)(.*?)\?\}\}(.*?)\{\{\/(\3)\?\}\})/ 

或而不捕獲所有組:

/(?:\{\{(?:#|\^)(.*?)\?\}\}(.*)\{\{\/(?:\1)\?\}\})/ 

的\ 3(或\ 1)將包含所述第一值(*?)。

請參閱rubular

但是,這可能無法完全解決您的嵌套匹配問題。儘管您可以使用結果並再次應用正則表達式。也許這對你的具體情況足夠了。

+0

非常感謝你,我仍然需要在實踐中對它進行測試,但現在看來它正是我所需要的。同樣感謝你的紅色鏈接,我正在尋找類似的東西。 – 2012-02-01 20:21:00

相關問題