2010-07-15 6 views
2

j'ai ce js code:Javascript Internet Explorer problème regex

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

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

alert (str); 

Et dans IE il me produit de résultat comme suit:

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

alors qu'il devrait fonctionner comme ceci:

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

et il le fait en FF, Opera et Chrome.

Remplace $_ par toute la chaîne précédente. Aucune séquence d'échappement ne semble aider.

Que puis-je Faire du tort?

Répondre

0

Ceci est dû à la façon dont Internet Explorer gère les références en remplacement. Utilisez $$ à la place, qui devrait fonctionner dans tous les navigateurs:

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','') 

Alternativement, si vous vouliez en faire un peu plus clair vous pouvez utiliser une fonction anonyme qui retourne la chaîne de remplacement:

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

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

Thanx qui était exactement waht j'avais besoin et ne pouvais pas trouver – user296422

Questions connexes