2-е обновление: в попытке дать исчерпывающий ответ я сравниваю три метода, предложенные в различных ответах.
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');
Результаты в Firefox 3.5.8 на Mac OS X 10.6.2:
10k substring: 16ms
10k split: 25ms
10k regex: 44ms
Результаты в Chrome 5.0.307.11 на Mac OS X 10.6.2:
10k substring: 14ms
10k split: 20ms
10k regex: 15ms
Обратите внимание, что метод подстроки уступает по функциональности, поскольку он возвращает пустую строку, если URL-адрес не содержит строку запроса. Как и ожидалось, два других метода вернут полный URL-адрес. Однако интересно отметить, что метод подстроки является самым быстрым, особенно в Firefox.
1-е ОБНОВЛЕНИЕ: На самом деле метод 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('?'));