用作RegExp()时正则表达式崩溃Chrome

时间:2013-04-16 19:04:39

标签: javascript regex string

有问题的正则表达式是:

/\[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]

当我使用RegExp()创建此项时,Chrome会挂起:

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

值得注意的是,这个正则表达式似乎没有被某些解析器正确解析,例如http://regexpal.com/

我的目标是从内到外匹配引号(从最里面的设置开始,然后我的出路)。任何人都有修复正则表达式的想法,或其他方法来做我正在尝试做的事情?

编辑:如果您希望看到它的行为正常,则可以在此处运行:http://regexr.com?34i3p

1 个答案:

答案 0 :(得分:1)

使用字符串创建RegExp时,需要转义斜杠:

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

斜杠被忽略,因此您最终得到像[quote]这样的字符类 可能无法将这些线索与catastrophic backtracking相匹配,但老实说我不太清楚如何。