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


379

完全なURLから開始する本当に簡単な方法はありますか?

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

ホスト部分のみを抽出します。

aaa.bbb.ccc.com

これを確実に実行するJavaScript関数があるはずですが、見つかりません。

回答:


827

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

  • window.location.host:あなたが得るsub.domain.com:8080sub.domain.com:80
  • window.location.hostname :あなたは sub.domain.com
  • window.location.protocol :あなたは http:
  • window.location.port:あなたが得る808080
  • window.location.pathname :あなたは /virtualPath
  • window.location.origin:あなたはhttp://sub.domain.com*****を取得します

更新:.originについて

***** refが述べているように、ブラウザの互換性window.location.originは明確ではありません。私はそれをクロムでチェックしましたhttp://sub.domain.com:porthttp://sub.domain.com、ポートが80以外の場合、およびポートが80の場合に返されました。

@torazaburoに触れてくれてありがとう。


IISにWebサイトと2つのアプリケーションがあります。例:sub.domain.com/v1sub.domain.com/v2などページsub.domain.com/v1/Default.aspx またはsub.domain.com/v2/Products/Default.aspxなど、どのように私のアプリケーションsub.domain.com/v2のルートである値/ v2を取得できますか?
Kiquenet

@KiquenetはWebStormのようなJavaScript IDEを使用します。コードを記述すると、可能なオプションが表示されます。
Bhargav Nanekalva

3
window.location.originIE9では未定義です(リンクによると、IE11 +です)。この答え役に立ちました。
Neolisk 2017

1
URLからホスト部分を抽出する方法に関する質問に答えないことを除いて、ほとんどの人にとって明らかに役立ちます。面白いことに、getRootUrl関数を使用した正解は17票対609票です。
Miro

@Miro質問に対する回答はそうではありません。2番目の箇条書きが質問に回答します。window.location.hostname:sub.domain.comを取得します
Paul

155

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

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

URLの場合、たとえば、次'http://stackoverflow.com/questions'を返します'http://stackoverflow.com'


5
上記の結果を得るには、「ホスト」ではなく「ホスト名」を使用する必要があるようです。ソース:stackoverflow.com/questions/6725890/...
user417669

同じ結果でlocation.originを使用できます。
セルジオ

1
元の質問では、URLのプロトコル部分は要求されませんでした。
Simon East

36

document.locationオブジェクトとそのhostor hostnameプロパティを使用します。

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

29

現在のページの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"

1
ありがとうございました。私は何時間もAPIから取得しているURLのを抽出するメソッドを探していました。とてもシンプルでした。私はそれを新しいURLでurlで読むだけでした。ありがとうございました。
Nodirabegimxonoyim

1
+99999999999999
ADJenks

ここで2つの答えのうちの1つは、ブラウザー側にいるとは想定していません...
Will59

IE11では機能しません:(
Teoman shipahi

24

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");
}

3
ありがとうございました!2番目の方法も好きです。特にサーバー側のjavascriptの場合、window.locationを取得する方法はありません:)
兆数

ここにある2つの答えのうちの1つは、ブラウザー側にいるとは限りません...しかし、新しいURLを使用して、Martin Konecnyの最新の答えを確認してください。
Will59



3

StackOverflowレスポンスで見たことのない別のハッキングがあります。画像の「src」属性を使用すると、サイトの完全なベースパスが生成されます。例えば ​​:

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

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

これにより、$ダミーイメージでHTTPリクエストが失敗することに注意してください。代わりに既存のイメージを使用して、コードをわずかに変更するだけでこれを回避できます。

別のバリアントはダミーリンクを使用し、HTTPリクエストに副作用はありません。

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

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


3

これをチェックして:

alert(window.location.hostname);

これはホスト名を次のように返します www.domain.com

そして:

window.location.host

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

完全なリファレンスについては、Mozilla開発者サイトを確認してください。


2

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

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

なぜ長くなるのか。var fullUrl = window.location.origin + window.location.pathname
Anant

しかし、プロトコルとホスト名の間にサブドメインのようなものを追加したい場合もあります。たとえば、多言語など
crx4

2

これは少し遅れていることはわかっていますが、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ていませんが、私の仕事ではそれは問題ではありません。


1

正規表現は、より多くの柔軟性を提供します。

    //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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.