他の方法は正しいですが、他の手段を使用して関数を解析する方が簡単です。正規表現を変換する方法は次のとおりです。
正規表現には、JavaScript で使用できない高度な構成要素や別の意味を持つ高度な構成要素は含まれていません。したがって、正規表現リテラルで同じ式を使用するだけです。
var r = /((https?|ftp)\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?([a-z0-9-.]*)\.([a-z]{2,3})(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?/;
現在、正規表現リテラルは連結をサポートしておらず、JS にx
は複数行の式を分割できる修飾子もありません。したがって、パターンを複数の部分に分けてコメントしたい場合は、文字列を再度連結して、その文字列をRegExp
コンストラクターに渡す必要があります。ここでの問題は、バックスラッシュを 2 倍にする必要があることです。これは、JavaScript の文字列コンパイルがエスケープされていない各バックスラッシュを飲み込んでしまうためです (バックスラッシュを正規表現エンジンに到達させるには、バックスラッシュをエスケープする必要があります)。
var rString = "((https?|ftp)\\:\\/\\/)?"; // SCHEME
rString += "([a-z0-9+!*(),;?&=\\$_.-]+(\\:[a-z0-9+!*(),;?&=\\$_.-]+)?@)?"; // User and Pass
rString += "([a-z0-9-.]*)\\.([a-z]{2,3})"; // Host or IP
rString += "(\\:[0-9]{2,5})?"; // Port
rString += "(\\/([a-z0-9+\\$_-]\\.?)+)*\\/?"; // Path
rString += "(\\?[a-z+&\\$_.-][a-z0-9;:@&%=+\\/\\$_.-]*)?"; // GET Query
rString += "(#[a-z_.-][a-z0-9+\\$_.-]*)?"; // Anchor
var r = new RegExp(rString);
いずれにせよ、r
お気に入りのマッチング関数 ( match
on 文字列、test
またはexec
on r
) で使用できるようになりました。