簡體   English   中英

Javascript regexp模板:僅在括號內的字符串相等時匹配

[英]Javascript regexp templates: only match when string inside brackets is equal

我正在為我正在建設的網站使用javascript模板系統,我遇到了一些問題。

我正在使用以下正則表達式來匹配我的字符串中的部分:

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

喂這個字符串如:

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

在聲明“user”= true時,顯示字符串。 當“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?}}時找到。

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

例如:

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

或者沒有捕獲所有組:

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

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

rubular上看到它。

但這可能無法完全解決嵌套匹配問題。 雖然您可以使用結果並再次應用正則表達式。 也許這足以滿足您的具體情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM