私はこれをjavascriptで解決しようとしていました、それは以下によって処理されるべきです:
var url = new URL('http://a:b@example.com:890/path/wah@t/foo.js?foo=bar&bingobang=&king=kong@kong.com#foobar/bing/bo@ng?bang');
(少なくともChromeでは)それは次のように解析されます:
{
"hash": "#foobar/bing/bo@ng?bang",
"search": "?foo=bar&bingobang=&king=kong@kong.com",
"pathname": "/path/wah@t/foo.js",
"port": "890",
"hostname": "example.com",
"host": "example.com:890",
"password": "b",
"username": "a",
"protocol": "http:",
"origin": "http://example.com:890",
"href": "http://a:b@example.com:890/path/wah@t/foo.js?foo=bar&bingobang=&king=kong@kong.com#foobar/bing/bo@ng?bang"
}
ただし、これはクロスブラウザーではないため(https://developer.mozilla.org/en-US/docs/Web/API/URL)、これを組み合わせて上記と同じ部分を引き出します。
^(?:(?:(([^:\/#\?]+:)?(?:(?:\/\/)(?:(?:(?:([^:@\/#\?]+)(?:\:([^:@\/#\?]*))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((?:\/?(?:[^\/\?#]+\/+)*)(?:[^\?#]*)))?(\?[^#]+)?)(#.*)?
この正規表現のためのクレジットに行くhttps://gist.github.com/rpflorence jsperf投稿者http://jsperf.com/url-parsing:(本来はここで見つけるhttps://gist.github.com/jlong/2428561 #comment-310066)これはもともと基づいていた正規表現を思いついた人。
パーツは次の順序です。
var keys = [
"href", // http://user:pass@host.com:81/directory/file.ext?query=1#anchor
"origin", // http://user:pass@host.com:81
"protocol", // http:
"username", // user
"password", // pass
"host", // host.com:81
"hostname", // host.com
"port", // 81
"pathname", // /directory/file.ext
"search", // ?query=1
"hash" // #anchor
];
それをラップし、クエリパラメータを提供する小さなライブラリもあります。
https://github.com/sadams/lite-url(bowerでも利用可能)
改善がある場合は、より多くのテストを含むプルリクエストを作成してください。同意して感謝します。
CrackUrl
ます。そのような関数が存在する場合は、それを使用して、手作りのコードよりも信頼性が高く効率的であることがほぼ保証されています。