所以我有一个正则表达式来标识URL:
/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/
但是,当我使用它来识别用户输入的URL时,简单地使用.test
会大大减慢页面速度,尽管根据MDN,它应该比exec更快。我是否使用了一种过时的测试正则表达式的方法?有没有我不知道的更快的方法?或者我的正则表达式真的很长很复杂?
这是一个JSFiddle。
编辑:Chrome 24版需要20.7秒Internet Explorer 9 中的1:48.5
因此,regex似乎只在处理已发布信息的url时滞后,例如在jsfiddle url Product.aspx?Item=N82E16811139009
中。当url的这一部分被删除时,regex将正确、快速地预成型。
但是,从([/w .-]*)*
中删除最后一个星号会导致正则表达式预型不正确,因此不能选择使用([/w .-]*)
。
相反,为了让regex能够处理带有发布信息的url,最后一部分需要删除:
/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/
至
/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/
这是因为regex的设计目的是检测url末尾的文件类型或反斜杠,而不是问号和发布的信息。删除最后一部分可以修复问题,regex可以快速正确运行和。