正規表現を調整しないでください。それは維持できないでしょう - あなたが今日それで問題を見つけることができないなら、メンテナーは明日それに問題を見つけなければなりませんか?
コアURLの構文が変更されないため、維持する必要のない正規表現を使用して、URLを適切に解析します。RFC 3986から
:
次の行が破壊ダウン整形URI参照をその成分にするための正規表現です。
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
上記の2行目の数字は、読みやすくするためのものです。 これらは、各部分表現の参照ポイントを示します(つまり、それぞれ の対のかっこ)。部分式に一致する値 <n>
を$<n>
と呼びます。
$1 = http:
$2 = http
$3 = //www.ics.uci.edu
$4 = www.ics.uci.edu
$5 = /pub/ietf/uri/
$6 = <undefined>
$7 = <undefined>
$8 = #Related
$9 = Related
あなたは次の操作を実行して、JavaScriptで、あなたのURLを確認することができ、という使い方:
var match = url.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
if (!match) { throw new Error('not a URL'); }
var url = {
protocol: match[2],
authority: match[4], // host, port, username, password
path: match[5],
query: match[6],
fragment: match[8]
};
if (url.protocol !== 'http' && url.protocol !== 'https') {
throw new Error('bad protocol');
}
if (!/^www.google.[a-z]+$/.test(url.authority || '')) {
throw new Error('bad host');
}
if (!/[?&]q=/.test(url.query || '')) {
throw new Error('bad query');
}
例えば、以下の部分式の試合で
http://www.ics.uci.edu/pub/ietf/uri/#Related
結果に上記の式に一致します
これはもっとコードですが、デバッグやメンテナンスがはるかに簡単で、ボーナスとして、URLがなぜ簡単であるのかを説明することができますmatic。
多くの良い答えが、私はこれを選んだので、これを選んだので、 ありがとう! – Ryan
これは非常に優れていますが、「q =」の前に[&\?]が必要であるため、実際にはURL例http://www.google.tld/q=*と一致しません。現実世界ではそれがあるので、おそらくエディタはここでは間違っています:) – eis