JavaScript-URLパスの一部を取得


回答:


425

window.location現在のウィンドウにそれを提供する組み込みオブジェクトのプロパティがあります。

// If URL is http://www.somedomain.com/account/search?filter=a#top

window.location.pathname // /account/search

// For reference:

window.location.host     // www.somedomain.com (includes port if there is one)
window.location.hostname // www.somedomain.com
window.location.hash     // #top
window.location.href     // http://www.somedomain.com/account/search?filter=a#top
window.location.port     // (empty string)
window.location.protocol // http:
window.location.search   // ?filter=a  


更新し、任意のURLに同じプロパティを使用します。

このスキーマはURLUtilsと呼ばれるインターフェースとして標準化されていることがわかりました。既存のwindow.locationオブジェクトとアンカー要素の両方がインターフェイスを実装します。

したがって、任意の URL に対して上記と同じプロパティを使用できます。URLを使用してアンカーを作成し、プロパティにアクセスします。

var el = document.createElement('a');
el.href = "http://www.somedomain.com/account/search?filter=a#top";

el.host        // www.somedomain.com (includes port if there is one[1])
el.hostname    // www.somedomain.com
el.hash        // #top
el.href        // http://www.somedomain.com/account/search?filter=a#top
el.pathname    // /account/search
el.port        // (port if there is one[1])
el.protocol    // http:
el.search      // ?filter=a

[1]:ポートを含むプロパティのブラウザーサポートに一貫性がありません。参照:http : //jessepollak.me/chrome-was-wrong-ie-was-right

これはChromeとFirefoxの最新バージョンで動作します。テストするInternet Explorerのバージョンがないので、JSFiddleの例を使用してテストしてください。

JSFiddleの例

URLアンカー要素なしで、URL自体にこのサポートを提供する次のオブジェクトもあります。現在のところ、安定したブラウザではサポートされていないようですが、Firefox 26で提供される予定 です。サポートされていると思われる場合は、こちらからお試しください


OPは、「ウィンドウの現在のURL」ではなく「a URL」を要求しました。文字列としてURLがある場合はどうなりますか?
Josh Noe 2013年

2
@JoshNoeこれで、アンカー要素で同じプロパティを使用できるようになります。更新された回答をご覧ください。
ニコール

素敵な情報をありがとう。IE 9とIE 8でテストしました(IE 9を使用してシミュレーションします)両方が機能します。もちろんChromeとFirefoxの最新バージョンで動作します:)

49
window.location.href.split('/');

通常の配列のようにアクセスできるすべてのURL部分を含む配列を提供します。

または、パスの部分のみを含む、@ Dylanによって提案されたよりエレガントなソリューション:

window.location.pathname.split('/');

2
window.location.pathname.split( '/'); ほとんどの場合、よりエレガントな解決策は、あなたがアクセスしようとしているされている場合、URLの異なるセクションでは、標準的なプロトコルおよびWWWなどbeyod
ディラン

1
window.location.pathname.split( '/')。filter(function(v){return v;}); JavaScript 1.6以降の空の要素を削除します。
Dhaval Desai 2018

28

これが現在の URLの場合はwindow.location.pathnameを使用し、それ以外の場合はこの正規表現を使用します。

var reg = /.+?\:\/\/.+?(\/.+?)(?:#|\?|$)/;
var pathname = reg.exec( 'http://www.somedomain.com/account/search?filter=a#top' )[1];

ほとんど完璧ですが、window.location.pathnameとは異なり、Windowsのパス名にはドライブ文字が含まれていません。
Theo

1
パス名が存在しない場合でも動作します正規表現については、使用:/.+?\:\/\/.+?(\/.+?)?(?:#|\?|)?$/
Scottmas

3

URLと呼ばれる便利なWeb APIメソッドがあります。

const url = new URL('http://www.somedomain.com/account/search?filter=a#top');
console.log(url.pathname.split('/'));
const params = new URLSearchParams(url.search)
console.log(params.get("filter"))


0

変数に格納したURLの一部を取得したい場合は、URL-Parseをお勧めします

const Url = require('url-parse');
const url = new Url('https://github.com/foo/bar');

ドキュメントによると、次の部分を抽出します。

返されたURLインスタンスには、次のプロパティが含まれています。

protocol:URLのプロトコルスキーム(http:など)。スラッシュ:プロトコルの後に2つのスラッシュ(//)が続くかどうかを示すブール値。auth:認証情報部分(例:ユーザー名:パスワード)。username:基本認証のユーザー名。password:基本認証のパスワード。host:ポート番号付きのホスト名。hostname:ポート番号なしのホスト名。port:オプションのポート番号。pathname:URLパス。query:解析がfalseに設定されていない限り、クエリ文字列を含む解析されたオブジェクト。ハッシュ:シャープ記号(#)を含むURLの「フラグメント」部分。href:完全なURL。origin:URLの起点。


0

(現在のものではなく)抽象URL文字列がある場合は、window.location次のトリックを使用できます。

let yourUrlString = "http://example.com:3000/pathname/?search=test#hash";

let parser = document.createElement('a');
parser.href = yourUrlString;

parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"

おかげjlong

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