Kiedy biegnę
/^(.+)+Q$/.test("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
w Chrome lub IE, trwa ~ 10 sekund. (Firefox jest w stanie to ocenić prawie natychmiast.)
Dlaczego zajmuje to tyle czasu? (I dlaczego/w jaki sposób Firefox potrafi to zrobić tak szybko?)
(Oczywiście, nigdy bym nie uruchamiał tego konkretnego regexu, ale trafiam na podobny problem z wyrażeniem URL pod adresem http://daringfireball.net/2010/07/improved_regex_for_matching_urls i wydaje mi się, że sprowadzają się do tego, to istnieją pewne adresy URL, które spowodują, że przeglądarka zamknąć)
na przykład:
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
Jednym z powodów może być to, że robi dużo backtracking. Nie wyjaśnia to jednak, dlaczego Firefox działa szybciej. Może mają dodatkową optymalizację. Jeśli chcesz dowiedzieć się więcej o wewnętrznych działaniach silników regex, sugeruję przeczytać http://shop.oreilly.com/product/9780596528126.do –
@thg opublikuj to jako odpowiedź, proszę –