你不會在JavaScript正則表達式得到回顧後。你的做得到了前瞻,但它在IE中是不可靠的,所以最好避免,除非你真的知道你在做什麼。
[^&(?!amp;)]+&
是的,這沒有任何意義。你不能在[]
字符組使用前瞻:你的意思是在這裏比賽字符不是&
,(
,?
,!
,a
,m
,p
,;
,或)
。
但是,您不應該看到&
無論如何:您應該使用一個普通的,未編碼的查詢字符串,例如。從location.search
獲取。 (如果你用正則表達式在一個字符串中對HTML標記進行黑客攻擊,你會遇到很多更大的問題。)
如果你是從location.search
得到查詢字符串,你就會有一個在前面?
如果有任何查詢。所以,你可以搭配任何&
或?
開始,做你的正則表達式匹配:
location.search.replace(
/([?&;]category=)[^&;]+/,
'$1'+encodeURIComponent(sNewValue)
);
注意到我也包括;
作爲一種可能的分離按照HTML4部分B.2.2,並用encodeURIComponent
,使無效的像空格和特殊字符如&
本身得到正確的URL編碼。字符$
,否則在正則表達式替換字符串中具有特殊含義。
這仍然是相當混亂,並沒有處理URL編碼的參數名稱(即c%61tegory
是一種有效的替代方式說)或多個參數具有相同的名稱。如果你想更強大的話,你可以轉儲正則表達式並做完整的查詢字符串解析/重建。查看功能從this answer做:
var lookup= queryToLookup(location.search);
lookup['category']= ['New value'];
var query= lookupToQuery(lookup);
謝謝你的回答。對我來說,最簡單的解決方案似乎是先用**%26 **替換** & **。然後做我的處理。 – bogdanvursu 2010-09-22 06:55:33