Khi tôi chạy
/^(.+)+Q$/.test("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
trong Chrome hoặc IE, phải mất ~ 10 giây để hoàn thành. (Firefox có thể đánh giá nó gần như ngay lập tức.)
Tại sao phải mất quá lâu? (Và tại sao/Firefox có thể làm điều đó nhanh như thế nào?)
(Tất nhiên, tôi không bao giờ chạy regex cụ thể này, nhưng tôi gặp vấn đề tương tự với URL regex tại http://daringfireball.net/2010/07/improved_regex_for_matching_urls và dường như đun sôi xuống này, tức là có một số URL mà sẽ làm cho trình duyệt để khóa lên)
Ví dụ:
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
Một lý do có thể là nó thực hiện nhiều thao tác quay lại. Điều này không giải thích được tại sao Firefox lại nhanh hơn. Có thể họ có một số tối ưu hóa bổ sung. Nếu bạn muốn tìm hiểu thêm về hoạt động bên trong của động cơ regex, tôi khuyên bạn nên đọc http://shop.oreilly.com/product/9780596528126.do –
@thg đăng câu trả lời này, vui lòng –