有问题的正则表达式是:
/\[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
答案 0 :(得分:1)
使用字符串创建RegExp时,需要转义斜杠:
new RegExp("\\[quote\\]((?:[^](?!\\[quote\\]))*?)\\[\\/quote\\]", "i")
斜杠被忽略,因此您最终得到像[quote]
这样的字符类
可能无法将这些线索与catastrophic backtracking相匹配,但老实说我不太清楚如何。