Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Регулярные выражения (https://javascript.ru/forum/events/4318-regulyarnye-vyrazheniya.html)

Never 10.07.2009 18:29

Регулярные выражения
 
Проблема с регулярными выражениями.
Нужно в строке заменить число 589 на 589+1:
var reg = /page=(\d+)\&url/;
var arrq = "http://site.ru/index.php?page=589&url=http%3A%2F%2Fdomen.ru%2F";
alert(arrq.replace(reg, reg+1));


Почему-то переменная reg принимает такое значение "page=589&url" , а не "589", т.е. такой код:
var reg = /page=(\d+)\&url/;
var arrq = "http://site.ru/index.php?page=589&url=http%3A%2F%2Fdomen.ru%2F";
alert(arrq.replace(reg, 111));

выдаёт "http://site.ru/index.php?123=http%3A%2F%2Fdomen.ru%2F"
а нужно "http://site.ru/index.php?page=123&url=http%3A%2F%2Fdomen.ru%2F". Помогите пожалуйста

Never 10.07.2009 18:44

Нашёл решение проблемы.
var reg = /page=(\d+)\&url/;
var qwer = "http://site.ru/index.php?page=589&url=http%3A%2F%2Fdomen.ru%2F";
var arrq = reg.exec(qwer);
var ert = Number(arrq[1]) 
alert(qwer.replace(arrq[1],ert+1));


Почему предыдущий пример не работал - непонято.

Kolyaj 10.07.2009 18:53

alert("http://site.ru/index.php?page=589&url=http%3A%2F%2Fdomen.ru%2F".replace(/(page=)(\d+)/, function(match, prefix, num) {
    return prefix + (Number(num) + 1);
}));

e1f 10.07.2009 18:54

var reg = /page=(\d+)\&url/;
var qwer = "http://site.ru/index.php?page=589&url=http%3A%2F%2Fdomen.ru%2F";
qwer = qwer.replace(reg, function(all, one){return (Number(one)||0)+1})

Почему не работало -- смотрим справочник по методам JS, к примеру на этом сайте есть неплохой: http://javascript.ru/manual

Kolyaj 10.07.2009 18:55

e1f,
потеряется половина.

e1f 10.07.2009 19:00

Kolyaj,
блин, ступил. Так:
var reg = /(page=)(\d+)(\&url)/;
var qwer = "http://site.ru/index.php?page=589&url=http%3A%2F%2Fdomen.ru%2F";
qwer = qwer.replace(reg, function(all, one, two, three){return one+((Number(two)||0)+1)+three});


Часовой пояс GMT +3, время: 23:31.