2013-04-16 75 views
1

在考慮中的正則表達式是:正則表達式爲正則表達式()一起使用時崩潰鉻

/\[quote\]((?:[^](?!\[quote\]))*?)\[\/quote\]/gi 

我將其應用於是

[quote]Level 10 
[quote]Level 9 
[quote]Level 8 
[quote]Level 7 
[quote]Level 6 
[quote]Level 5 
[quote]Level 4 
[quote]Level 3 
[quote]Level 2 
[quote]Level 1[/quote] 
Level 2[/quote] 
Level 3[/quote] 
Level 4[/quote] 
Level 5[/quote] 
Level 6[/quote] 
Level 7[/quote] 
Level 8[/quote] 
Level 9[/quote] 
Level 10[/quote] 

當我創建此使用正則表達式(字符串),像這樣,Chrome瀏覽器掛起:

new RegExp("\[quote\]((?:[^](?!\[quote\]))*?)\[\/quote\]", "gi") 

這也是值得注意的是,這個正則表達式似乎並不被一些解析器正確解析,比如http://regexpal.com/

我的目標是從內向外匹配引號(從最裏面的集合開始並按照我的出路)。任何人有想法來修復正則表達式,或其他方式來做我想做的事情?

編輯:如果你想看到它正常運作,但它在這裏工作:http://regexr.com?34i3p

+0

請注意,反斜槓是字符串以及正則表達式中的轉義字符。你必須避開反斜槓:''\ [qoute \]'變成'「\\ [quote \\]'等等...... –

回答

1

當使用字符串創建一個正則表達式,你需要逃跑的斜線:

new RegExp("\\[quote\\]((?:[^](?!\\[quote\\]))*?)\\[\\/quote\\]", "i") 

的斜槓被忽略,所以你最終得到了像[quote]這樣的字符類。
可能無法將這些線索與catastrophic backtracking相匹配,但說實話我不太清楚。

+0

這是行得通的,但是當我替換它時,$ 1不會工作。見:http://jsfiddle.net/28V3M/1/ – Jake

+0

@賈克 - 很高興聽到。我有一個非捕獲組,「(?:)',幾秒鐘,我已經編輯它。 – Kobi

相關問題