2017-03-20 41 views
0

我有一個正則表達式,我用它來匹配各種花括號對,所以我可以在開發過程中對它們進行註釋。RegEx匹配大括號和前導或尾隨Substr開始或結束引用

我正則表達式是:

/{{.+_includes\s*}}|[^>\s]*{{\s*|\s*}}[^<\s]*|{%.+%}/g 

這符合我裹在#標誌子:

1. #{{ #builtin_body_classes# }}# 

2. #"{{ #builtin_body_classes# }}# no-js" 

3. "no-js #{{ #builtin_body_classes# }}"# 

4. "no-js some-other-class #{{#builtin_body_classes#}}"# 

5. #{{standard_header_includes}}# 

6. #{{ standard_footer_includes }}# 

7. <title>#{{ #page_meta.html_title# }}#</title> 

8. #{% type_of_module "unique_module_name" parameterString='String parameter value', parmeterBoolean=True %}# 

注意空格(兩個空格),鉛和跟蹤各行不匹配,也不是title標籤的例子。

這和我想要的除了兩種情況 - 包裹在引號中的行(情況2,3和4)完全相同。

對於這些情況,我希望引導或跟蹤也包括在比賽中的花括號的引號和子字符串,例如,

2. #"{{ #builtin_body_classes# }} no-js"# 

3. #"no-js {{ #builtin_body_classes# }}"# 

4. #"no-js some-other-class {{#builtin_body_classes#}}"# 

同樣,我裹着我想#符號之間匹配子。

非常感謝幫助實現這個目標,我敢肯定,我的正則表達式可以被優化過;-)

回答

0

我現在已經解決了這個問題。我的正則表達式是:

/{{.+_includes\s*}}|(?:"+.*|[^>\s]*){{\s*|\s*}}(?:.*"+|[^<\s]*)|{%.+%}/g 

你可以看到我下面的比賽,也住在http://regexr.com/3fijm

1. #{{ #builtin_body_classes# }}# 

2. #"{{ #builtin_body_classes# }} no-js"# 

3. #"no-js {{ #builtin_body_classes# }}"# 

4. #"no-js some-other-class {{#builtin_body_classes#}}"# 

5. #{{standard_header_includes}}# 

6. #{{ standard_footer_includes }}# 

7. <title>#{{ #page_meta.html_title# }}#</title> 

8. #{% type_of_module "unique_module_name" parameterString='String parameter value', parmeterBoolean=True %}# 

正如我在我原來的問題說,我相信這個表達式可以優化或改進。所以建議歡迎!

+0

正則表達式部件(替代)的前提都是基於行的。它們不能跨越行,但它可以匹配許多單獨的'}}或'{{'在一行中。那是你的意圖嗎?你關心關閉嗎? – sln

+0

感謝您的評論!我不太關心替換多對花括號。但理想情況下,只需要替換第一個「{{」和最後一個「}}」(顯然符合我在示例中的所需條件)。這有助於在開發過程中突出顯示任何錯誤 –

相關問題