[javascript] URL에서 querystring 제거

Javascript의 경로에서 쿼리 문자열을 제거하는 쉬운 방법은 무엇입니까? window.location.search를 사용하는 Jquery 용 플러그인을 보았습니다. 나는 할 수 없다 : 내 경우의 URL은 AJAX에서 설정된 변수입니다.

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3&SortOrder=dsc'



답변

이것을 얻는 쉬운 방법은 다음과 같습니다.

function getPathFromUrl(url) {
  return url.split("?")[0];
}

querystring이 없을 때 해시 (원래 질문의 일부가 아닌) 를 제거 하려는 사람들에게는 조금 더 필요합니다.

function stripQueryStringAndHashFromPath(url) {
  return url.split("?")[0].split("#")[0];
}

편집하다

@caub (원래 @crl)는 쿼리 문자열과 해시 모두에서 작동하는 더 간단한 콤보를 제안했습니다 (누구든지 문제가있는 경우 RegExp를 사용하지만).

function getPathFromUrl(url) {
  return url.split(/[?#]/)[0];
}


답변

두 번째 업데이트 : 포괄적 인 답변을 제공하기 위해 다양한 답변에서 제안 된 세 가지 방법을 벤치마킹하고 있습니다.

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
var i;

// Testing the substring method
i = 0;
console.time('10k substring');
while (i < 10000) {
    testURL.substring(0, testURL.indexOf('?'));
    i++;
}
console.timeEnd('10k substring');

// Testing the split method
i = 0;
console.time('10k split');
while (i < 10000) {
    testURL.split('?')[0];
    i++;
}
console.timeEnd('10k split');

// Testing the RegEx method
i = 0;
var re = new RegExp("[^?]+");
console.time('10k regex');
while (i < 10000) {
    testURL.match(re)[0];
    i++;
}
console.timeEnd('10k regex');

Mac OS X 10.6.2의 Firefox 3.5.8 결과 :

10k substring:  16ms
10k split:      25ms
10k regex:      44ms

Mac OS X 10.6.2의 Chrome 5.0.307.11 결과 :

10k substring:  14ms
10k split:      20ms
10k regex:      15ms

URL에 쿼리 문자열이 포함되지 않은 경우 빈 문자열을 반환하므로 하위 문자열 메서드의 기능이 떨어집니다. 다른 두 가지 방법은 예상대로 전체 URL을 반환합니다. 그러나 하위 문자열 방법이 특히 Firefox에서 가장 빠릅니다.


첫 번째 업데이트 : 실제로 Robusto제안한 split () 메소드 쿼리 문자열이없는 경우에도 작동하기 때문에 이전에 제안한 것보다 더 나은 솔루션입니다.

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.split('?')[0];    // Returns: "/Products/List"

var testURL2 = '/Products/List';
testURL2.split('?')[0];    // Returns: "/Products/List"

원래 답변 :

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?'));    // Returns: "/Products/List"


답변

이것은 오래된 질문 일 수도 있지만 쿼리 매개 변수를 제거하기 위해이 방법을 시도했습니다. 쿼리 매개 변수 제거와 결합하여 다시로드가 필요했기 때문에 원활하게 작동하는 것 같습니다.

window.location.href = window.location.origin + window.location.pathname;

또한 간단한 문자열 추가 작업을 사용하고 있기 때문에 성능이 좋을 것이라고 생각합니다. 그러나이 답변 에서 여전히 스 니펫과 비교할 가치가 있습니다.


답변

간단한 방법은 다음과 같이 할 수 있습니다

public static String stripQueryStringAndHashFromPath(String uri) {
 return uri.replaceAll(("(\\?.*|\\#.*)"), "");
}


답변

RegEx에 있다면 ….

var newURL = testURL.match(new RegExp("[^?]+"))


답변

var path = "path/to/myfile.png?foo=bar#hash";

console.log(
    path.replace(/(\?.*)|(#.*)/g, "")
);


답변

backbone.js ( url anchor경로 로 포함 )를 사용하는 경우 url query string이 나타날 수 있습니다.

  1. 전에 url anchor:

    var url = 'http://example.com?a=1&b=3#routepath/subpath';
  2. 이후 url anchor:

    var url = 'http://example.com#routepath/subpath?a=1&b=3';

해결책:

window.location.href.replace(window.location.search, '');
// run as: 'http://example.com#routepath/subpath?a=1&b=3'.replace('?a=1&b=3', '');