从URL中删除查询string
什么是一个简单的方法来删除Javascript中的path查询string? 我见过一个使用window.location.search的Jquery插件。 我不能这样做:在我的情况下,url是从AJAX设置的variables。
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3&SortOrder=dsc'
一个简单的方法得到这个是:
function getPathFromUrl(url) { return url.split("?")[0]; }
对于那些也希望删除哈希 (不是原来的问题的一部分), 当没有查询string存在 ,这需要多一点:
function stripQueryStringAndHashFromPath(url) { return url.split("?")[0].split("#")[0]; }
编辑
@caub(最初@crl)提出了一个更简单的组合,适用于查询string和散列(虽然它使用RegExp,万一任何人有问题):
function getPathFromUrl(url) { return url.split(/[?#]/)[0]; }
第二次更新:为了提供一个全面的答案,我正在对各种答案中提出的三种方法进行基准testing。
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
请注意,substring方法在function上比较差,因为如果URL不包含查询string,它将返回一个空string。 如预期的那样,其他两种方法将返回完整的URL。 不过有趣的是,子串方法是最快的,特别是在Firefox中。
第一个更新:实际上,Robustobuild议的split()方法是我之前提出的更好的解决scheme,因为即使没有查询string,它也能工作:
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("[^?]+"))
一个简单的方法是你可以做如下
public static String stripQueryStringAndHashFromPath(String uri) { return uri.replaceAll(("(\\?.*|\\#.*)"), ""); }
var path = "path/to/myfile.png?foo=bar#hash"; console.log( path.replace(/(\?.*)|(#.*)/g, "") );
如果使用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 urlparsing器插件 。