Cuando corro
/^(.+)+Q$/.test("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
en Chrome o IE, se tarda unos 10 segundos en completarse. (Firefox puede evaluarlo casi al instante.)
¿Por qué tarda tanto? (¿Y por qué/cómo Firefox puede hacerlo tan rápido?)
(Por supuesto, nunca hubiera ejecutado esta expresión regular en particular, pero estoy llegando a un problema similar con la expresión regular de URL en http://daringfireball.net/2010/07/improved_regex_for_matching_urls y parece se reducen a esto, es decir, hay ciertas direcciones URL que hará que el navegador se bloquee)
por ejemplo:
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
Una razón podría ser que hace un gran retroceso. Esto no explica por qué Firefox es más rápido. Tal vez tengan alguna optimización adicional. Si desea obtener más información sobre el funcionamiento interno de los motores de expresiones regulares, sugiero leer http://shop.oreilly.com/product/9780596528126.do –
@thg publicar esto como una respuesta, por favor –