所以我有一个识别网址的正则表达式:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
但是,当我使用它来识别用户输入的网址时,只需使用.test
大幅减慢网页速度,即使根据MDN,也是supposed to be faster than exec。我使用过时的正则表达式测试方法吗?有一种我不知道的更快的方法吗?或者我的正则表达真的很长很复杂?
这是JSFiddle。
编辑: Chrome,v24需要20.7秒 Internet Explorer 9中的1:48.5
答案 0 :(得分:0)
因此,似乎正则表达式只会在处理已发布信息的网址时滞后,例如在jsfiddle网址Product.aspx?Item=N82E16811139009
中。当网址的这一部分被删除时,正则表达式会正确且快速地预先形成。
但是,删除([\/\w \.-]*)*
中的最后一个星标会导致正则表达式预编码错误,因此无法使用([\/\w \.-]*)
。
相反,为了使正则表达式能够处理包含已发布信息的URL,最后一部分需要删除:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
到
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*/
这是因为正则表达式旨在检测网址末尾的文件类型或反斜杠,而不是问号和发布的信息。删除最后一部分可以解决问题,正则表达式可以快速正确运行和。