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 예제

URLanchor 요소없이 URL 자체에 대한 이러한 지원을 제공 할 객체 도 있습니다 . 현재로서는 안정적인 브라우저가 지원하지 않는 것 같지만 Firefox 26에서 제공되고 있다고합니다 . 지원이 있다고 생각되면 여기에서 시도하십시오 .


OP는 "창의 현재 URL"이 아니라 "URL"을 요청했습니다. URL을 문자열로 사용하면 어떻게 되나요?
Josh Noe

2
@JoshNoe 이제 앵커 요소에서 동일한 속성을 사용할 수 있습니다. 업데이트 된 답변을 참조하십시오.
Nicole

좋은 정보 주셔서 감사합니다. IE 9와 IE 8 (IE 9을 사용하여 시뮬레이션)로 테스트했습니다. 물론 Chrome 및 Firefox 최신 버전에서 작동 :)
Zhao

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

모든 URL 부분을 포함하는 배열을 제공하므로 일반 배열처럼 액세스 할 수 있습니다.

또는 @Dylan이 제안한 더 우아한 솔루션으로 경로 부분 만 있습니다.

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

2
window.location.pathname.split ( '/'); 표준 프로토콜 및 www 등으로 URL의 다른 섹션에 액세스하려는 경우 대부분의 경우 더 우아한 솔루션입니다.
Dylan

1
window.location.pathname.split ( '/'). filter (function (v) {return v;}); Javascript 1.6 이상의 빈 요소를 제거합니다.
Dhaval Desai

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 이라는 유용한 웹 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 :). 슬래시 : 프로토콜 뒤에 두 개의 슬래시 (//)가 오는지 여부를 나타내는 부울입니다. 인증 : 인증 정보 부분 (예 : username : password) username : 기본 인증의 사용자 이름입니다. 비밀번호 : 기본 인증의 비밀번호입니다. 호스트 : 포트 번호가있는 호스트 이름. 호스트 이름 : 포트 번호가없는 호스트 이름. 포트 : 선택적 포트 번호. 경로 이름 : URL 경로. query : 구문 분석이 false로 설정되지 않은 경우 쿼리 문자열을 포함하는 구문 분석 된 오브젝트입니다. 해시 : 파운드 기호 (#)를 포함하여 URL의 "조각"부분. href : 전체 URL origin : URL의 출처.


0

현재 URL이 아닌 추상 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.