2e mise à jour: Pour tenter de fournir une réponse complète, je compare les 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 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 de sous-chaîne est inférieure en fonctionnalité car elle renvoie une chaîne vide si l'URL ne contient pas de chaîne de requête. Les deux autres méthodes renverraient l'URL complète, comme prévu. Cependant, il est intéressant de noter que la méthode des sous-chaînes est la plus rapide, en particulier dans Firefox.
1ère MISE À JOUR: En fait, la méthode split () suggérée par Robusto est une meilleure solution que celle que j'ai suggérée plus tôt, car elle fonctionnera même s'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:
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?')); // Returns: "/Products/List"