第二次更新: 为了提供全面的答案,我正在对各种回答中提出的三种方法进行基准测试。
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
var i;
i = 0;
console.time('10k substring');
while (i < 10000) {
testURL.substring(0, testURL.indexOf('?'));
i++;
}
console.timeEnd('10k substring');
i = 0;
console.time('10k split');
while (i < 10000) {
testURL.split('?')[0];
i++;
}
console.timeEnd('10k split');
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方法在功能上不如其他两种方法,在URL没有查询字符串时返回空字符串。另外两种方法将按预期返回完整的URL。然而有趣的是,在Firefox中,substring方法是最快的。
第1个更新:实际上,由Robusto提出的split()方法是一个更好的解决方案,因为它可以在没有查询字符串的情况下使用:
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.split('?')[0];
var testURL2 = '/Products/List';
testURL2.split('?')[0];
抱歉,我只能使用英文进行沟通和回答问题。
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3'
testURL.substring(0, testURL.indexOf('?'))
split('?', 1)[0]
。该代码意为:以问号为分隔符,将字符串拆分成两个部分,只保留第一部分。 - bobince?
是一个字符串字面量,不是一个正则表达式。 - Robusto.split(/[?#]/)[0]
? - caub