자바 스크립트에서 URL을 호스트 이름과 경로로 구문 분석하는 방법은 무엇입니까?


379

나는 끈을 가지고 싶습니다

var a = "http://example.com/aa/bb/"

그것을 객체로 처리하여

a.hostname == "example.com"

a.pathname == "/aa/bb"

11
현재 URL에서 작업중인 경우 개체 에서 직접 액세스 hostname하고 액세스 할 수 있습니다 . pathnamelocation
rvighne

1
"lastPathPart"는 어떻습니까?
Victor

정규 표현식은 아니지만 Python 모듈 tldextract는 이것을 정확하게 수행합니다. github.com/john-kurkowski/tldextract
Oliver Oliver

답변:


395

현대적인 방법 :

new URL("http://example.com/aa/bb/")

속성 hostnamepathname함께 몇 가지 다른 객체를 반환합니다 .

첫 번째 인수는 상대 또는 절대 URL입니다. 상대적인 경우 두 번째 인수 (기본 URL)를 지정해야합니다. 예를 들어, 현재 페이지와 관련된 URL의 경우 :

new URL("/aa/bb/", location)

브라우저 외에도이 API는 v7부터 Node.js에서도 사용할 수 있습니다require('url').URL .


7
좋은! 상대 URL은 그것을 깨뜨립니다 ... :( new URL('/stuff?foo=bar#baz')->SyntaxError: Failed to construct 'URL': Invalid URL
lakenen

56
실험 기술 : IE는이를 지원하지 않습니다! developer.mozilla.org/en-US/docs/Web/API/URL/…
cwouter

10
@cwouter : 그것은 IE 대체하는, 그러나 가장자리에서 작업을 수행
rvighne

4
이 작업을 수행하는 방법입니다. 엣지는 이미 3 가지 버전입니다. 즉 중요하지 않습니다
Claudiu Creanga

7
JavaScript에는 브라우저 나 서버에서 작동하는 URL을 구문 분석 할 수있는 기본 제공 방법이 없다는 사실은 매우 슬픈 일입니다 ...
Skitterm

365
var getLocation = function(href) {
    var l = document.createElement("a");
    l.href = href;
    return l;
};
var l = getLocation("http://example.com/path");
console.debug(l.hostname)
>> "example.com"
console.debug(l.pathname)
>> "/path"

14
이것이 브라우저 간 호환 가능한 솔루션인지 확인 하시겠습니까?
cllpse 2009

70
이것은 원래 포스터에 도움이 될 수 있지만이 답변은 DOM을 사용하여 작업을 수행하기 때문에 브라우저에서 JS 작업을 수행하는 사람들에게만 유효합니다.
Adam Batkin

4
독창성과 함께 단순성의 또 다른 예.
Saeed Neamati

26
href가 상대적인 경우 IE에서 작동하지 않습니다. l. 호스트 이름이 비어 있습니다. 전체 URL 만 제공하는 경우 작동합니다.
Derek 이전

7
절대 URL을 사용하더라도 IE (IE 11에서 테스트)는 Chrome 및 Firefox와 다르게 작동합니다. IE pathname는 슬래시를 제거하지만 다른 브라우저는 제거하지 않습니다. 따라서 브라우저에 따라 /path또는로 끝납니다 path.
TrueWill

299

여기에서 찾을 수 있습니다 : https://gist.github.com/jlong/2428561

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

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

11
현재 브라우저 위치의 구문 분석 된 부분을 가져 오려면 첫 번째 두 줄이 parser = location;되고 다음 줄이 모두 작동합니다. 지금 Chrome과 IE9에서 시도했습니다.
Lee Meador

9
또한 pathnameIE에서 슬래시를 포함하지 않습니다. 그림을 이동. : D
nevelis

3
IE의 경우 "/"+ parser.pathname
sbose

경고 : http:단지 domain.com프로토콜없이 href에 전달하더라도 반환 됩니다 . 나는 이것을 사용하여 프로토콜이 누락되었는지 확인하고, 그렇다면 추가 할 수는 있지만 http를 가정합니다 : 따라서이 목적으로 사용할 수 없었습니다.
Max Hodges

호스트 이름에는 실제로 프로토콜이 포함됩니다. 최신 버전의 Chrome에서 테스트합니다.
AndroidDev

109

다음은 정규 표현식을 사용하는 간단한 함수입니다. a 태그 동작 입니다.

찬성

  • 예측 가능한 동작 (크로스 브라우저 문제 없음)
  • DOM이 필요하지 않습니다
  • 정말 짧습니다.

단점

  • 정규 표현식은 읽기가 약간 어렵습니다.

-

function getLocation(href) {
    var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);
    return match && {
        href: href,
        protocol: match[1],
        host: match[2],
        hostname: match[3],
        port: match[4],
        pathname: match[5],
        search: match[6],
        hash: match[7]
    }
}

-

getLocation("http://example.com/");
/*
{
    "protocol": "http:",
    "host": "example.com",
    "hostname": "example.com",
    "port": undefined,
    "pathname": "/"
    "search": "",
    "hash": "",
}
*/

getLocation("http://example.com:3000/pathname/?search=test#hash");
/*
{
    "protocol": "http:",
    "host": "example.com:3000",
    "hostname": "example.com",
    "port": "3000",
    "pathname": "/pathname/",
    "search": "?search=test",
    "hash": "#hash"
}
*/

편집하다:

다음은 정규식에 대한 분석입니다.

var reURLInformation = new RegExp([
    '^(https?:)//', // protocol
    '(([^:/?#]*)(?::([0-9]+))?)', // host (hostname and port)
    '(/{0,1}[^?#]*)', // pathname
    '(\\?[^#]*|)', // search
    '(#.*|)$' // hash
].join(''));
var match = href.match(reURLInformation);

4
상대 URL에서는 작동하지 않습니다. 정규식을 만들 때 RFC-3986을 따르셨습니까? > getLocation ( "// example.com/"); null> getLocation ( "/ pathname /? search"); null> getLocation ( "/ pathname /"); null> getLocation ( "relative"); null
모임

2
나는 이것이 DOM을 사용하지 않는 방법을 좋아하지만, 집단은 좋은 지적이 있습니다. 이것이 상대 경로를 처리 할 수 ​​있다면 좋을 것입니다. 공백을 채우고 코드를 추가하려면 window.location (요소)을 사용해야합니다. 이 경우이 방법은 위선이됩니다. 대안이없는 한, 이것이 어떻게 완벽하게 해결 될 수 있는지 확실하지 않습니다.
Turbo

원래 URL과 함께 href 키를 추가하면 DOM 구현으로 해당 반환 객체에 일관성을 제공합니다.
mattdlockyer

2
누군가 상대 URL을 구문 분석 해야하는 경우 업데이트 된 정규 표현식은 다음과 같습니다. / ^ (? :( https? \ :) \ / \ /)? (([[^ : \ /? #] *) (? : \ : ([0 -9] +))?) ([\ /] {0,1} [^? #] *) (\? [^ #] * |) (#. * |) $ /
shlensky

75
var loc = window.location;  // => "http://example.com:3000/pathname/?search=test#hash"

currentUrl을 반환합니다.

자신의 문자열을 URL로 전달하려면 ( IE11에서는 작동하지 않음 ) :

var loc = new URL("http://example.com:3000/pathname/?search=test#hash")

그런 다음 다음과 같이 구문 분석 할 수 있습니다.

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

60

freddiefujiwara의 답변은 꽤 좋지만 Internet Explorer 내에서 상대 URL을 지원해야했습니다. 나는 다음 해결책을 생각해 냈다.

function getLocation(href) {
    var location = document.createElement("a");
    location.href = href;
    // IE doesn't populate all link properties when setting .href with a relative URL,
    // however .href will return an absolute URL which then can be used on itself
    // to populate these additional fields.
    if (location.host == "") {
      location.href = location.href;
    }
    return location;
};

이제 필요한 속성을 얻으려면 이것을 사용하십시오.

var a = getLocation('http://example.com/aa/bb/');
document.write(a.hostname);
document.write(a.pathname);

JSFiddle 예 : http://jsfiddle.net/6AEAB/


4
이것이 정답입니다. 상대 대 절대 ​​URL 처리를 매우 영리하게 사용합니다. +1
L0j1k 16:30에

JSFiddle 링크가 처음 사망 한 것은 아닙니다 : stackoverflow.com/questions/25179964/…
Claus

3
이것은 훌륭하게 작동했지만 다른 사람들을 도울 수있는 업데이트가 하나 있습니다. 이것을 사용하여 postMessage 요청의 출처를 확인하고 포트가 기본 포트 (80 또는 443) 일 때 경로에 추가되지 않습니다. URL을 만들 때 조건부로 확인했습니다. var locationHost = (location.port !== '80' && location.port !== '443') ? location.host : location.hostname; var locationOrigin = location.protocol + '//' + locationHost;
rhoster

2
이 솔루션의 더 인기있는 변형에 대해 다른 곳 에서이 의견을 작성했지만 이것이 내가 가장 좋아하는 솔루션이므로 여기에서 반복하고 싶었습니다. IE11에서는 href에 사용자 이름이 있으면 이러한 모든 속성 읽기에서 보안 오류가 발생합니다. 예 : " example.com "은 잘 작동합니다. 그러나 " username@www.example.com "또는 " username : password@www.example.com "은 앵커 요소 (예 : 해시)의 다른 속성 중 하나를 참조하여 실패하고 눈에 띄는 오류를 발생시킵니다.
Clippy

17

js-uri (Google 코드에서 사용 가능)는 문자열 URL을 가져 와서 URI 객체를 확인합니다.

var some_uri = new URI("http://www.example.com/foo/bar");

alert(some_uri.authority); // www.example.com
alert(some_uri);           // http://www.example.com/foo/bar

var blah      = new URI("blah");
var blah_full = blah.resolve(some_uri);
alert(blah_full);         // http://www.example.com/foo/blah

감사!!! 하지만 나는 uri = new Location ( " example.com/aa/bb" ) typeof (window.location) == typeof (uri)
freddiefujiwara

window.location은 문자열이므로 실제로 어떻게 이것이 가능하거나 도움이되는지 알지 못합니다. 한 형식에서 다른 형식으로 쉽게 변환 할 수 있는데 왜 형식이 일치해야합니까?
Rex M

developer.mozilla.org/en/DOM/window.location 은 매우 좋은 API입니다! 그래서 String을 window.location 객체로 변환하기를 바랍니다.
freddiefujiwara

1
window.location을 설정하면 브라우저가 변경되지 않으므로 브라우저가 변경됩니다.
epascarello 2009

1
흠. window.location은 문자열이 아니지만 문자열에서 할당 할 수 있습니다. 그것이 모방 될 수 있는지 잘 모르겠습니다. 위치의 프로토 타입을 새로운 URI 객체에 할당하려고 시도했지만 작동하지 않았습니다.
Rex M

12

간단한 정규 표현식은 어떻습니까?

url = "http://www.example.com/path/to/somwhere";
urlParts = /^(?:\w+\:\/\/)?([^\/]+)(.*)$/.exec(url);
hostname = urlParts[1]; // www.example.com
path = urlParts[2]; // /path/to/somwhere

유효한 것을 구문 분석 //user:password@example.com/path/x?y=z하면 간단한 정규 표현식으로 자르지 않는 이유를 알 수 있습니다. 이제 유효하지 않은 것을 버리고 예측 가능한 방식으로 구제해야합니다.
Mikko Rantalainen

간단한 정규 표현식은 간단한 문제에 대한 것입니다 :) 그러나 이런 URL은 정규 표현식으로 해석 할 수 없다고 들리지 않습니다. 단지 더 많은 조정이 필요합니다. 그러나 좀 더 복잡하고 총알이 필요한 경우 아마도 도서관에 갈 것입니다.
svestka

12

오늘이 문제가 발생하여 URL-MDN 웹 API를 발견했습니다.

var url = new URL("http://test.example.com/dir/subdir/file.html#hash");

이 반환 :

{ hash:"#hash", host:"test.example.com", hostname:"test.example.com", href:"http://test.example.com/dir/subdir/file.html#hash", origin:"http://test.example.com", password:"", pathname:"/dir/subdir/file.html", port:"", protocol:"http:", search: "", username: "" }

내 첫 번째 공헌을 기대하면 도움이됩니다!


중복 답변
Martin van Driel

6
네,하지만 맨 위에있는 사람은 2017 년에 자신의 조롱을 업데이트합니다. 저는 2016 년에 게시합니다.
A. Moynet

아 내 나쁜, 미안
Martin van Driel

9

https://gist.github.com/1847816 에서 복사 한 버전이 있지만 다시 읽고 디버깅하기 쉽도록 다시 작성했습니다. 앵커 데이터를 "result"라는 다른 변수에 복사하는 목적은 앵커 데이터가 꽤 길기 때문에 제한된 수의 값을 결과에 복사하면 결과를 단순화하는 데 도움이됩니다.

/**
 * See: https://gist.github.com/1847816
 * Parse a URI, returning an object similar to Location
 * Usage: var uri = parseUri("hello?search#hash")
 */
function parseUri(url) {

  var result = {};

  var anchor = document.createElement('a');
  anchor.href = url;

  var keys = 'protocol hostname host pathname port search hash href'.split(' ');
  for (var keyIndex in keys) {
    var currentKey = keys[keyIndex]; 
    result[currentKey] = anchor[currentKey];
  }

  result.toString = function() { return anchor.href; };
  result.requestUri = result.pathname + result.search;  
  return result;

}

6

크로스 브라우저 URL 구문 분석 은 IE 6, 7, 8 및 9 의 상대 경로 문제를 해결합니다 .

function ParsedUrl(url) {
    var parser = document.createElement("a");
    parser.href = url;

    // IE 8 and 9 dont load the attributes "protocol" and "host" in case the source URL
    // is just a pathname, that is, "/example" and not "http://domain.com/example".
    parser.href = parser.href;

    // IE 7 and 6 wont load "protocol" and "host" even with the above workaround,
    // so we take the protocol/host from window.location and place them manually
    if (parser.host === "") {
        var newProtocolAndHost = window.location.protocol + "//" + window.location.host;
        if (url.charAt(1) === "/") {
            parser.href = newProtocolAndHost + url;
        } else {
            // the regex gets everything up to the last "/"
            // /path/takesEverythingUpToAndIncludingTheLastForwardSlash/thisIsIgnored
            // "/" is inserted before because IE takes it of from pathname
            var currentFolder = ("/"+parser.pathname).match(/.*\//)[0];
            parser.href = newProtocolAndHost + currentFolder + url;
        }
    }

    // copies all the properties to this object
    var properties = ['host', 'hostname', 'hash', 'href', 'port', 'protocol', 'search'];
    for (var i = 0, n = properties.length; i < n; i++) {
      this[properties[i]] = parser[properties[i]];
    }

    // pathname is special because IE takes the "/" of the starting of pathname
    this.pathname = (parser.pathname.charAt(0) !== "/" ? "/" : "") + parser.pathname;
}

사용법 ( demo JSFiddle here ) :

var myUrl = new ParsedUrl("http://www.example.com:8080/path?query=123#fragment");

결과:

{
    hash: "#fragment"
    host: "www.example.com:8080"
    hostname: "www.example.com"
    href: "http://www.example.com:8080/path?query=123#fragment"
    pathname: "/path"
    port: "8080"
    protocol: "http:"
    search: "?query=123"
}

5

IE, Firefox 및 Chrome에서 작동하는 최신 솔루션을 찾는 사람들에게 :

하이퍼 링크 요소를 사용하는 이러한 솔루션은 크롬에서 동일하게 작동하지 않습니다.유효하지 않은 (또는 빈) URL을 크롬에 전달하면 항상 스크립트가 호출 된 호스트를 반환합니다. 따라서 IE에서는 공백으로 표시되지만 Chrome에서는 로컬 호스트 (또는 기타)를 얻습니다.

당신이 리퍼러를 보려고한다면, 이것은 기만적입니다. 돌아 오는 호스트가 원래 URL에 있는지 확인하여이 문제를 처리 할 수 ​​있습니다.

    function getHostNameFromUrl(url) {
        // <summary>Parses the domain/host from a given url.</summary>
        var a = document.createElement("a");
        a.href = url;

        // Handle chrome which will default to domain where script is called from if invalid
        return url.indexOf(a.hostname) != -1 ? a.hostname : '';
    }

이것은 고려해야 할 매우 중요한 것입니다!
2rs2ts

그래도 상대 URL이 완전히 끊어집니다!
lakenen

4

AngularJS 방식-여기에서 바이올린 : http://jsfiddle.net/PT5BG/4/

<!DOCTYPE html>
<html>
<head>
    <title>Parse URL using AngularJS</title>
</head>
<body ng-app ng-controller="AppCtrl" ng-init="init()">

<h3>Parse URL using AngularJS</h3>

url: <input type="text" ng-model="url" value="" style="width:780px;">

<ul>
    <li>href = {{parser.href}}</li>
    <li>protocol = {{parser.protocol}}</li>
    <li>host = {{parser.host}}</li>
    <li>hostname = {{parser.hostname}}</li>
    <li>port = {{parser.port}}</li>
    <li>pathname = {{parser.pathname}}</li>
    <li>hash = {{parser.hash}}</li>
    <li>search = {{parser.search}}</li>
</ul>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>

<script>
function AppCtrl($scope) {

    $scope.$watch('url', function() {
        $scope.parser.href = $scope.url;
    });

    $scope.init = function() {
        $scope.parser = document.createElement('a');
        $scope.url = window.location;
    }

}
</script>

</body>
</html>

2
당신이 사용 $document하고 $window서비스 한다면 그것은 더
각질

3

모듈 패턴을 사용한 간단하고 강력한 솔루션. 여기에는 pathname항상 선행 슬래시 ( /) 가없는 IE에 대한 수정이 포함됩니다 .

더 역동적 인 파서를 제공하는 JSFiddle 과 함께 Gist 를 만들었습니다 . 확인하고 의견을 보내 주시기 바랍니다.

var URLParser = (function (document) {
    var PROPS = 'protocol hostname host pathname port search hash href'.split(' ');
    var self = function (url) {
        this.aEl = document.createElement('a');
        this.parse(url);
    };
    self.prototype.parse = function (url) {
        this.aEl.href = url;
        if (this.aEl.host == "") {
           this.aEl.href = this.aEl.href;
        }
        PROPS.forEach(function (prop) {
            switch (prop) {
                case 'hash':
                    this[prop] = this.aEl[prop].substr(1);
                    break;
                default:
                    this[prop] = this.aEl[prop];
            }
        }, this);
        if (this.pathname.indexOf('/') !== 0) {
            this.pathname = '/' + this.pathname;
        }
        this.requestUri = this.pathname + this.search;
    };
    self.prototype.toObj = function () {
        var obj = {};
        PROPS.forEach(function (prop) {
            obj[prop] = this[prop];
        }, this);
        obj.requestUri = this.requestUri;
        return obj;
    };
    self.prototype.toString = function () {
        return this.href;
    };
    return self;
})(document);

데모

산출

{
 "protocol": "https:",
 "hostname": "www.example.org",
 "host": "www.example.org:5887",
 "pathname": "/foo/bar",
 "port": "5887",
 "search": "?a=1&b=2",
 "hash": "section-1",
 "href": "https://www.example.org:5887/foo/bar?a=1&b=2#section-1",
 "requestUri": "/foo/bar?a=1&b=2"
}
{
 "protocol": "ftp:",
 "hostname": "www.files.com",
 "host": "www.files.com:22",
 "pathname": "/folder",
 "port": "22",
 "search": "?id=7",
 "hash": "",
 "href": "ftp://www.files.com:22/folder?id=7",
 "requestUri": "/folder?id=7"
}


3

왜 사용하지 않습니까?

        $scope.get_location=function(url_str){
        var parser = document.createElement('a');
        parser.href =url_str;//"http://example.com:3000/pathname/?search=test#hash";
        var info={
            protocol:parser.protocol,   
            hostname:parser.hostname, // => "example.com"
            port:parser.port,     // => "3000"
            pathname:parser.pathname, // => "/pathname/"
            search:parser.search,   // => "?search=test"
            hash:parser.hash,     // => "#hash"
            host:parser.host, // => "example.com:3000"      
        }
        return info;
    }
    alert( JSON.stringify( $scope.get_location("http://localhost:257/index.php/deploy/?asd=asd#asd"),null,4 ) );

3

Locutus 프로젝트 (이전 php.js) parse_url()에서 함수를 사용할 수도 있습니다 .

암호:

parse_url('http://username:password@hostname/path?arg=value#anchor');

결과:

{
  scheme: 'http',
  host: 'hostname',
  user: 'username',
  pass: 'password',
  path: '/path',
  query: 'arg=value',
  fragment: 'anchor'
}

1
그 URL은 나를 위해 작동하지 않았지만 나는 여기에서 그것을 발견했다 github.com/hirak/phpjs/blob/master/functions/url/parse_url.js
Stan Quinn

@StanQuinn, php.js가 이름을 Locutus로 변경했기 때문입니다. 새 링크로 답변을 업데이트했습니다.
Andrey Rudenko

3
function parseUrl(url) {
    var m = url.match(/^(([^:\/?#]+:)?(?:\/\/((?:([^\/?#:]*):([^\/?#:]*)@)?([^\/?#:]*)(?::([^\/?#:]*))?)))?([^?#]*)(\?[^#]*)?(#.*)?$/),
        r = {
            hash: m[10] || "",                   // #asd
            host: m[3] || "",                    // localhost:257
            hostname: m[6] || "",                // localhost
            href: m[0] || "",                    // http://username:password@localhost:257/deploy/?asd=asd#asd
            origin: m[1] || "",                  // http://username:password@localhost:257
            pathname: m[8] || (m[1] ? "/" : ""), // /deploy/
            port: m[7] || "",                    // 257
            protocol: m[2] || "",                // http:
            search: m[9] || "",                  // ?asd=asd
            username: m[4] || "",                // username
            password: m[5] || ""                 // password
        };
    if (r.protocol.length == 2) {
        r.protocol = "file:///" + r.protocol.toUpperCase();
        r.origin = r.protocol + "//" + r.host;
    }
    r.href = r.origin + r.pathname + r.search + r.hash;
    return m && r;
};
parseUrl("http://username:password@localhost:257/deploy/?asd=asd#asd");

절대 및 상대 URL 모두에서 작동합니다.


abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
山 茶树 和 葡萄 树

@ 山 茶树 和 葡萄 树 userinfo 하위 구성 요소를 올바르게 처리하도록 코드를 업데이트했습니다. 귀하의 의견에 감사드립니다, 나는 이전에 그 문제를 눈치 채지 못했습니다
니콜라이

이 정규식을 사랑합니다
Kunal

2

휠 재발 명을 중지하십시오. https://github.com/medialize/URI.js/를 사용 하십시오.

var uri = new URI("http://example.org:80/foo/hello.html");
// get host
uri.host(); // returns string "example.org:80"
// set host
uri.host("example.org:80");

5
문제를 풀고 싶을 때마다 ... 라이브러리를 사용합니까? 좋아 ... (not)
jiminikiz

4
항상 (실제로 거의 결코)은 아니지만 URL을 구문 분석하기가 매우 까다 롭습니다 .RFC에는 많은 세부 정보가 있습니다. 수천 명이 사용하고 테스트 한 라이브러리를 사용하는 것이 좋습니다.
Hugo Sequeira

다른 사람이 라이브러리로 바퀴를 재발견하는 대신 내장 된 것을 사용하는 것은 어떻습니까? 참조 stackoverflow.com/a/24006120/747739

내장 함수에 대한 IE11 지원은 없으므로이 라이브러리가 우수합니다. 라이브러리를 사용하지 말라고 말하는 것은 jQuery를 사용하지 말고 네이티브 코드를 작성해야한다는 말과 같습니다. 모든 개발자는 다른 유스 케이스를 가지고 있으며 '최상의'방법이 없으며 때로는 바닐라 / 네이티브가 가장 효과적이며 때로는 그렇지 않습니다. 개발자의 92 %가 여전히 배워야합니다.
tno2007

1

url.js 라이브러리 (웹 및 node.js 용)를 사용하십시오.

https://github.com/websanova/js-url

url: http://example.com?param=test#param=again

url('?param'); // test
url('#param'); // again
url('protocol'); // http
url('port'); // 80
url('domain'); // example.com
url('tld'); // com

etc...

1

첫 번째 대답으로 간단한 해킹

var getLocation = function(href=window.location.href) {
    var l = document.createElement("a");
    l.href = href;
    return l;
};

인수 없이도 현재 호스트 이름을 알아낼 수 있습니다 . getLocation (). hostname 은 현재 호스트 이름 을 제공합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.