1

所以我有一个识别 URL 的正则表达式:

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

但是,当我使用它来识别用户输入的 url 时,简单地使用.test会大大降低页面速度,即使根据MDN,它应该比 exec 更快。我是否使用过时的正则表达式测试方法?有没有我不知道的更快的方法?还是我的正则表达式真的很长很复杂?

这是一个JSFiddle

编辑:在 Chrome 中需要 20.7 秒,在 Internet Explorer 9 中 v24 1:48.5

4

1 回答 1

0

因此,似乎正则表达式仅在处理已发布信息的 url 时才会滞后,例如在 jsfiddle urlProduct.aspx?Item=N82E16811139009中。当 url 的那部分被删除时,正则表达式会正确、快速地执行。

但是,删除最后一个星号([\/\w \.-]*)*会使正则表达式预执行不正确,因此([\/\w \.-]*)不能选择使用。

相反,为了使正则表达式能够处理带有发布信息的 url,需要删除最后一部分:

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*/

这是因为正则表达式旨在检测 url 末尾的文件类型或反斜杠,而不是问号和发布的信息。删除最后一部分可以解决问题,并且正则表达式可以正确快速地运行。

于 2013-02-20T23:29:38.430 回答