การปรับปรุงครั้งที่ 2:ในความพยายามที่จะให้คำตอบที่ครอบคลุมฉันกำลังเปรียบเทียบมาตรฐานสามวิธีที่เสนอในคำตอบที่หลากหลาย
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');
ผลลัพธ์ใน Firefox 3.5.8 บน Mac OS X 10.6.2:
10k substring: 16ms
10k split: 25ms
10k regex: 44ms
ผลลัพธ์ใน Chrome 5.0.307.11 บน Mac OS X 10.6.2:
10k substring: 14ms
10k split: 20ms
10k regex: 15ms
โปรดทราบว่าวิธีการสตริงย่อยจะด้อยกว่าในการทำงานเนื่องจากมันจะส่งกลับสตริงว่างถ้า URL ไม่ได้มีการสอบถาม อีกสองวิธีจะคืนค่า URL ตามที่คาดไว้ อย่างไรก็ตามสิ่งที่น่าสนใจคือวิธีการซับสตริงนั้นเร็วที่สุดโดยเฉพาะใน Firefox
1st UPDATE:อันที่จริงวิธีการแยก () ที่แนะนำโดย Robustoเป็นวิธีแก้ปัญหาที่ดีกว่าที่ฉันแนะนำไว้ก่อนหน้านี้เนื่องจากมันจะทำงานแม้ว่าจะไม่มีการสอบถาม:
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"
คำตอบเดิม:
var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3';
testURL.substring(0, testURL.indexOf('?')); // Returns: "/Products/List"