1

だから私はURLを識別する正規表現を持っています:

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

しかし、それを使用してユーザーが入力した URL を識別すると、 MDNによるとexec よりも高速であると想定されて.testいても、単純に使用するとページが大幅に遅くなります。正規表現のテストに古い方法を使用していませんか? 私が知らないより速い方法はありますか?または私の正規表現は本当に長くて複雑ですか?

ここにJSFiddleがあります。

編集: Chrome では 20.7 秒、v24 では Internet Explorer 9 では 1:48.5 秒かかります

4

1 に答える 1

0

したがって、正規表現は、たとえば jsfiddle url などで情報を投稿した URL を処理するときにのみ遅れるようですProduct.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 に答える