2010-12-15 58 views
1

我在C#中創建了以下正則表達式,以格式{token}從字符串中提取令牌。我在C#中開發了正則表達式,並確認它可以工作。JavaScript RegEx語法錯誤

// c# 
var regex = new Regex(
    "\\{ (?>[^{}]+| \\{ (?<number>) | \\} (?<-number>))*(?(number)(?!))\\}", 
    RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | 
    RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); 

var matches = regex.Matches("blah {token1} blah blah blah {token2} blah"); 

可變matches結束含有兩個比賽 - 「{} TOKEN1」 和 「{} token2」。

我需要在JavaScript中執行此,但我得到一個語法錯誤表達,當我試圖執行以下行...

// JavaScript 
var regex = new RegExp("\\{ (?>[^{}]+| \\{ (?<number>) | \\} (?<-number>))*(?(number)(?!))\\}"); 

有什麼明顯的,我做錯了什麼?
我想使用JavaScript中不支持的RegEx功能嗎?

回答

4

如果你想匹配的「{}東西」所有出現的嘗試:

\{[^\}]*\} 

或者是有一個必須滿足另一個條件?像{token [0-9]}?

http://rubular.com/可以幫助測試。

+0

沒有額外的要求。這實際上似乎對我有用。下面的代碼給出了我需要的匹配... text.match(/ \ {[^ \}] * \}/g);看起來我太過於複雜了。我真的很努力與正則表達式的東西。我非常尊重任何有頭腦的人。非常感謝。 – 2010-12-15 10:38:55

+0

歡迎您,我很樂意提供幫助! – morja 2010-12-15 10:47:36

4

Javascript正則表達式不支持具有(?> ...)資格的獨立子表達式。 ?實際上被評估爲量詞。

+0

這是瀏覽器專用的,有些實際上可以識別一種或多或少的擴展類型的正則表達式。 – sjngm 2010-12-15 10:23:37

+0

我覺得它會是這樣的。謝謝(你的)信息。這聽起來像是回到了繪圖板。 – 2010-12-15 10:24:23

+0

是的。例如,使用'(?:...)'抑制捕獲確實有效。 – 2010-12-15 10:24:28

2

重點是如果您使用C#(或Java),則使用字符串來編寫正則表達式。在這樣的字符串中,您需要再次轉義所有轉義字符,這就是爲什麼您需要「\\ {」來轉義「{」。但是,JavaScript支持自己的正則表達式類似於Perl和PHP的正則表達式語法。

+0

所以這有多個問題。不正確地轉義字符以及使用引擎不支持的正則表達式功能。我很好! – 2010-12-15 10:34:19