Проблема регулярного выражения в Javascript Internet Explorer - PullRequest
2 голосов
/ 15 июля 2010

у меня есть этот код js:

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.

Заменяет $_ всей предыдущей строкой.Кажется, никакие escape-последовательности не помогают.

Что я делаю не так?

1 Ответ

0 голосов
/ 15 июля 2010

Это связано с тем, что 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','')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...