Когда я бегу
/^(.+)+Q$/.test("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
в Chrome или IE, она занимает ~ 10 секунд. (Firefox может оценить его почти мгновенно.)
Почему так долго? (И почему/как Firefox может сделать это так быстро?)
(Конечно, я никогда не запускаю это конкретное регулярное выражение, но я сталкиваюсь с аналогичной проблемой с URL-адресом регулярного выражения в http://daringfireball.net/2010/07/improved_regex_for_matching_urls, и, похоже, сводится к этому, то есть определенные URL-адрес, которые будут вызывать браузер запирать)
Например:
var re = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;
re.test("http://google.com/?q=(AAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
http://www.regular-expressions.info/catastrophic.html – georg
Одна из причин может заключаться в том, что он много отступает. Это не объясняет, почему Firefox работает быстрее. Возможно, у них есть дополнительная оптимизация. Если вы хотите узнать больше о внутренней работе двигателей регулярных выражений, я предлагаю прочитать http://shop.oreilly.com/product/9780596528126.do –
@thg опубликуйте это как ответ, пожалуйста –