2014-08-29 62 views
3

我目前正在編寫一個正則表達式,它將允許我使用JavaScript編寫的基本條件if/else系統。 (我知道有可能是更容易的方法來做到這一點!)用正則表達式匹配if/else語句

這是我需要的工作內容:

{?if language = german}Hallo!{?else}Hello!{?endif} 
{?if language = german}{#greeting}{?endif} 

我已經寫/{\?if ([^{}]+)}(.+)(?:{\?else})?(.+)?{\?endif}/g不幸的是只匹配的這一部分。到目前爲止,我一直在使用RegExr進行測試。

我預期的輸出,使用輸出表達式1: $1\n2: $2\n3: $3\n,應該是:

1: language = german 
2: Hallo! 
3: Hello! 

1: language = german 
2: {#greeting} 
3: 

不幸的是,我得到這個:

1: language = german 
2: Hallo!{?else}Hello! 
3: 

1: language = german 
2: {#greeting} 
3: 

我在做什麼錯在這裏?我對編寫正則表達式相對來說比較陌生,所以我認爲這是一種方式,而我只是沒有正確地做。

+0

我同意,有更簡單的方法來做到這一點!但是,+1是一個很好的明確問題。 – Smandoli 2014-08-29 21:30:04

+1

嘗試使用非貪婪量詞。由於'else'是可選的,貪婪的量詞已經過去了。 – Barmar 2014-08-29 21:30:17

回答

2

您首先要使+運營商non-greedy。然後,不要將第三個捕獲組設置爲可選,只需將該組放置在非捕獲組內,使非捕獲組可選。

/{\?if ([^{}]+)}(.+?)(?:{\?else}(.+?))?{\?endif}/g 

Live Demo

+0

謝謝,這似乎完美! – Forest 2014-08-29 22:29:51