2. Güncelleme: Kapsamlı bir cevap sunmaya çalışırken, çeşitli cevaplarda önerilen üç yöntemi karşılaştırıyorum.
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');
Mac OS X 10.6.2'de Firefox 3.5.8 sonuçları:
10k substring: 16ms
10k split: 25ms
10k regex: 44ms
Mac OS X 10.6.2 üzerinde Chrome 5.0.307.11 ile ilgili sonuçlar:
10k substring: 14ms
10k split: 20ms
10k regex: 15ms
URL bir sorgu dizesi içermiyorsa, boş bir dize döndürdüğünden alt dize yönteminin işlev bakımından daha düşük olduğunu unutmayın. Diğer iki yöntem de beklendiği gibi tam URL'yi döndürür. Bununla birlikte, özellikle Firefox'ta alt dize yönteminin en hızlı olduğunu belirtmek ilginçtir.
1. GÜNCELLEME: Aslında Robusto tarafından önerilen split () yöntemi , daha önce önerdiğimden daha iyi bir çözümdür, çünkü sorgu dizisi olmasa bile çalışacaktır:
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"
Orijinal Yanıt:
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?')); // Returns: "/Products/List"