web-dev-qa-db-ja.com

JavaScriptでURLのホスト名部分を抽出する方法

完全なURLから始めるための本当に簡単な方法はありますか。

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

そしてホスト部分だけを抽出します。

aaa.bbb.ccc.com

確実にこれを行うJavaScript関数があるはずですが、私はそれを見つけることができません。

341
Dustin Getz

http://sub.domain.com/virtualPath/page.htmというアドレスのページがあるとします。これらの結果を達成するには、ページコード内で次のコードを使用します。

  • window.location.Hostsub.domain.com:8080またはsub.domain.com:80が手に入ります
  • window.location.hostnamesub.domain.comがもらえます
  • window.location.protocolhttp:がもらえます
  • window.location.port8080または80が手に入ります
  • window.location.pathname/virtualPathがもらえます
  • window.location.Origin:あなたはhttp://sub.domain.comを手に入れるでしょう*****

更新:.Originについて

***** ref にあるように、window.location.Originに対するブラウザの互換性は明確ではありません。私はクロムでそれをチェックしました、そしてそれがポートが80以外であればhttp://sub.domain.com:portを、そしてポートが80であればhttp://sub.domain.comを返しました。

@torazaburoに感謝します。

756
Amin Saqi

ロケーションプロトコルとホストを連結できます。

var root = location.protocol + '//' + location.Host;

URLの場合、'http://stackoverflow.com/questions'とすると、'http://stackoverflow.com'が返されます。

145
CMS

document.locationオブジェクトとそのHostまたはhostnameプロパティを使用してください。

alert(document.location.hostname); // alerts "stackoverflow.com"
35
n1313

2つの方法があります。最初のものはここで別の答えの変形ですが、これはデフォルト以外のポートを説明します:

function getRootUrl() {
  var defaultPorts = {"http:":80,"https:":443};

  return window.location.protocol + "//" + window.location.hostname
   + (((window.location.port)
    && (window.location.port != defaultPorts[window.location.protocol]))
    ? (":"+window.location.port) : "");
}

しかし、私はこの単純な方法(どのURI文字列でも動作する)を好む。

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}
20
danorton

現在のページのURLだけでなく、任意の任意のURLを使用できるようにしたいので、受け入れられた答えは私には機能しませんでした。

URLオブジェクト を見てください。

var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol;  // "http:"
url.hostname;  // "aaa.bbb.ccc.com"
url.pathname;  // "/asdf/asdf/sadf.aspx"
url.search;    // "?blah"
15
Martin Konecny

つかいます

window.location.Origin

とのために: " http://aaa.bbb.ccc.ddd.com/sadf.aspx?blah "

http://aaa.bbb.ccc.ddd.com/

7
Idan Wender

やってみる

document.location.Host

または

document.location.hostname
6
Chris Nielsen

私が使用したStackOverflowレスポンスで見たことのないもう1つのハックがあります。画像の "src"属性を使用すると、あなたのサイトの完全なベースパスが得られます。例えば ​​:

var dummy = new Image;
dummy.src = '$';                  // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'

http://domain.com/somesite/index.htmlのようなURLでは、roothttp://domain.com/somesite/に設定されます。これはlocalhostまたは有効なベースURLに対しても機能します。

これにより、$ダミーイメージに対する失敗したHTTP要求が発生します。これを避けるために、代わりに既存の画像を使用することができますが、わずかなコードの変更のみです。

もう1つの亜種はダミーリンクを使用します。HTTPリクエストには影響を与えません。

var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;

ただし、すべてのブラウザでテストしたわけではありません。

3
kuroi neko

私はこれが少し遅れているのを知っています、しかし私は少しES6構文できれいな小さい機能を作りました

function getHost(href){
  return Object.assign(document.createElement('a'), { href }).Host;
}

ES5でも次のように書くことができます。

function getHost(href){
  return Object.assign(document.createElement('a'), { href: href }).Host;
}

もちろんIEはObject.assignをサポートしていませんが、私の職業ではそれは問題ではありません。

2
Noah Cardoza

何か指定したいのですが。誰かが私が必要とするようなパスで全体のURLを取得したい場合は、使用することができます。

var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
2
crx4

これをチェックして:

alert(window.location.hostname);

これはホスト名をwww.domain.comとして返します。

そして:

window.location.Host

www.example.com:80のようなポートでドメイン名を返します

完全な参照チェックについては Mozilla開発者 サイト.

2
code.rider

正規表現ははるかに高い柔軟性を提供します。

    //document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah
    //1.
     var r = new RegExp(/http:\/\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com

    //2. 
     var r = new RegExp(/http:\/\/[^/]+\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com/asdf
0
mvs