답변:
이것을 얻는 쉬운 방법은 다음과 같습니다.
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];
}
split('?', 1)[0]
.
?
정규 표현식이 아닌 문자열 리터럴입니다.
.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"
RegEx에 있다면 ....
var newURL = testURL.match(new RegExp("[^?]+"))
a++;
. iMac 2.93Ghz Core 2 Duo의 Firefox 3.6에서 테스트 수정, RegEx는 8ms, split 메소드는 3ms를 얻습니다. 그럼에도 불구하고 답은 +1입니다. 그럼에도 불구하고 여전히 다른 옵션입니다.
match()
객체를 반환합니다. 당신은 아마 그것을 원하지 않을 것입니다. 전화 toString()
하십시오 (또는 +''
).
backbone.js ( url anchor
경로 로 포함 )를 사용하는 경우 url query string
이 나타날 수 있습니다.
전에 url anchor
:
var url = 'http://example.com?a=1&b=3#routepath/subpath';
이후 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', '');
URL에서 복잡한 작업을 수행해야하는 경우 jQuery url 파서 플러그인을 살펴볼 수 있습니다 .
(() => {
'use strict';
const needle = 'SortOrder|Page'; // example
if ( needle === '' || needle === '{{1}}' ) {
return;
}
const needles = needle.split(/\s*\|\s*/);
const querystripper = ev => {
if (ev) { window.removeEventListener(ev.type, querystripper, true);}
try {
const url = new URL(location.href);
const params = new URLSearchParams(url.search.slice(1));
for (const needleremover of needles) {
if (params.has(needleremover)) {
url.searchParams.delete(needleremover);
window.location.href = url;
}
}
} catch (ex) { }
};
if (document.readyState === 'loading') {
window.addEventListener('DOMContentLoaded', querystripper, true);
} else {
querystripper();
}
})();
그것이 내가 한 방법이며 RegEx 지원도 있습니다.