2012-02-13 65 views
0

如果我想抓住一個URI的查詢字符串的相關部分,我可以選擇使用這兩種方法中的任何一種,這兩種方法都有效。它可能不值得迷戀,但考慮到選擇,你會選擇哪種方法,爲什麼?鑑於使用正則表達式/反向引用或分割/替換替換,你會選擇哪個?

A)

var PN = this.href.replace(/.*&partNum=(.*)&partName=.*/, '$1'); 
var PName = this.href.replace(/.*&partName=(.*)&class=.*/, '$1'); 

B)

var hrefSplit = this.href.split('&'); 
var PN = hrefSplit[1].replace('partNum=', '');  
var PName = hrefSplit[2].replace('partName=', ''); 

回答

2

我不認爲我會使用其中任何一個,他們都依賴於查詢字符串的格式太多。 (考慮如果查詢字符串有partName之前partNum會發生什麼情況)。這種事通常是一個等待發生的維護麻煩。

相反,我會將查詢字符串轉換爲地圖(爲此目的使用集中式功能),然後檢索地圖的相關部分。

+0

啊,沒有想到這一點。謝謝! – earachefl 2012-02-14 12:58:42

0

根據參數順序兩者都是危險的,你應該分析是這樣的:

var num = url.match(/\WpartNum=(\w*)/)[1]; 
var name = url.match(/\WpartName=(\w*)/)[1]; 

var pNum = /\WpartNum=(\w*)/.exec(url)[1]; 
var pName = /\WpartName=(\w*)/.exec(url)[1]; 
+1

可能需要在這些前面加上一些分隔符,否則「foopartNum」會把它們弄亂。還認爲'\ w'是一個有點限制。也許是'[^&=]'。 – 2012-02-13 14:59:26

+0

@ t-j-crowder是的,我正在用'\ W'修復它。 – sinsedrix 2012-02-13 15:23:01