Segunda actualización: en un intento de proporcionar una respuesta integral, estoy comparando los tres métodos propuestos en las diferentes respuestas.
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');
Resultados en Firefox 3.5.8 en Mac OS X 10.6.2:
10k substring: 16ms
10k split: 25ms
10k regex: 44ms
Resultados en Chrome 5.0.307.11 en Mac OS X 10.6.2:
10k substring: 14ms
10k split: 20ms
10k regex: 15ms
Tenga en cuenta que el método de subcadena tiene una funcionalidad inferior, ya que devuelve una cadena en blanco si la URL no contiene una cadena de consulta. Los otros dos métodos devolverían la URL completa, como se esperaba. Sin embargo, es interesante notar que el método de subcadena es el más rápido, especialmente en Firefox.
1ª ACTUALIZACIÓN: en realidad, el método split () sugerido por Robusto es una mejor solución que la que sugerí anteriormente, ya que funcionará incluso cuando no haya una cadena de consulta:
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"
Respuesta original
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?')); // Returns: "/Products/List"