2ème mise à Jour: Dans la tentative de fournir une réponse complète, je suis la comparaison des trois méthodes proposées dans les différentes réponses.
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');
Résultats dans Firefox 3.5.8 sur Mac OS X 10.6.2:
10k substring: 16ms
10k split: 25ms
10k regex: 44ms
Résultats dans google Chrome 5.0.307.11 sur Mac OS X 10.6.2:
10k substring: 14ms
10k split: 20ms
10k regex: 15ms
Notez que la méthode sous-chaîne est inférieure dans les fonctionnalités qu'il renvoie une chaîne vide si l'URL ne contient pas de chaîne de requête. Les deux autres méthodes serait de retour l'URL complète, comme prévu. Néanmoins, il est intéressant de noter que la sous-chaîne de la méthode la plus rapide, en particulier dans Firefox.
1ère mise à JOUR: en Fait la méthode split() suggéré par Robusto est une meilleure solution que celle que j'ai suggéré plus tôt, car il fonctionne même quand il n'y a pas de chaîne de requête:
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"
Réponse Originale À Cette Question:
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?')); // Returns: "/Products/List"