2010-07-15 10 views
2

我有這個js代碼:的Javascript Internet Explorer的正則表達式的問題

var str = "javascript:__doPostBack('ctl00$M$List$_rli2$ctl06','')"; 

alert (str); 
var str = str.replace(/\$_rli\d+/, "$_rli" + 7); 

alert (str); 

而在IE它產生了我如下結果:

javascript:__doPostBack('ctl00$M$Listjavascript:__doPostBack('ctl00$M$List$_rli2$ctl06','')rli7$ctl06','') 

,而應該像這樣工作:

javascript:__doPostBack('ctl00$M$List$_rli7$ctl06','') 

它在FF,Opera和Chrome中都有。

它用前一個字符串取代$_。沒有轉義序列似乎有幫助。

我在做什麼錯?

回答

0

這是由於Internet Explorer在替換中處理引用的方式。使用$$相反,應該在所有的瀏覽器:

var str = "javascript:__doPostBack('ctl00$M$List$_rli2$ctl06','')"; 

alert (str); 
var str = str.replace(/\$_rli\d+/, "$$_rli" + 7); 

alert (str); 
// -> javascript:__doPostBack('ctl00$M$List$_rli7$ctl06','') 

另外,如果你想讓它更清楚一點,你可以用返回替換字符串的匿名函數:

var str = str.replace(/\$_rli\d+/, function() { return "$_rli" + 7; }); 

alert (str); 
// -> javascript:__doPostBack('ctl00$M$List$_rli7$ctl06','') 
+1

感謝名單,這是正是我需要和無法找到的 – user296422 2010-07-15 12:34:34