2013-04-16 43 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

相关问题