当我跑
/^(.+)+Q$/.test("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
在 Chrome 或 IE 中,大约需要 10 秒才能完成。(Firefox 几乎可以立即评估它。)
为什么需要这么长时间?(以及 Firefox 为何/如何能够如此迅速地做到这一点?)
(当然,我永远不会运行这个特定的正则表达式,但我在http://daringfireball.net/2010/07/improved_regex_for_matching_urls遇到了与 URL 正则表达式类似的问题,它似乎归结为这一点,即那里是某些会导致浏览器锁定的 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")