Cập nhật lần 2: Trong nỗ lực cung cấp câu trả lời toàn diện, tôi đang điểm chuẩn ba phương pháp được đề xuất trong các câu trả lời khác nhau.
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');
Kết quả trong Firefox 3.5.8 trên Mac OS X 10.6.2:
10k substring: 16ms
10k split: 25ms
10k regex: 44ms
Kết quả trong Chrome 5.0.307.11 trên Mac OS X 10.6.2:
10k substring: 14ms
10k split: 20ms
10k regex: 15ms
Lưu ý rằng phương thức chuỗi con kém hơn về chức năng vì nó trả về một chuỗi trống nếu URL không chứa chuỗi truy vấn. Hai phương thức khác sẽ trả về URL đầy đủ, như mong đợi. Tuy nhiên, thật thú vị khi lưu ý rằng phương thức chuỗi con là nhanh nhất, đặc biệt là trong Firefox.
CẬP NHẬT thứ 1: Trên thực tế phương thức split () được đề xuất bởi Robusto là một giải pháp tốt hơn mà tôi đã đề xuất trước đó, vì nó sẽ hoạt động ngay cả khi không có chuỗi truy vấn:
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"
Câu trả lời gốc:
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?')); // Returns: "/Products/List"