Как я могу увеличить число, сопоставленное через регулярное выражение? - PullRequest
4 голосов
/ 16 декабря 2009

Я добавляю новое поле в одно из моих веб-приложений, чтобы посетители могли добавить продукт. Нажатие «добавить продукт» клонирует один из существующих входных данных, и я установил для него пустое значение.

Однако мне нужно обновить имя. Название в этом формате:

<input type="text" name="product[0][0][3][title]" value="my product" id="input-AbGHtQS3" maxlength="150" />

Мне нужно увеличить последний числовой индекс, то есть 3 в этом примере.

Я написал регулярное выражение для соответствия соответствующему символу, но как я могу увеличить это последнее число?

Вот мое регулярное выражение:

/^product\[\d+\]\[\d+\]\[(\d+)\]\[.+\]/

Как я могу увеличить этот последний номер?

Ответы [ 3 ]

10 голосов
/ 16 декабря 2009

from: Используйте RegExp, чтобы сопоставить число в скобках, затем увеличьте его

Метод replace может принимать функцию в качестве второго аргумента. Он получает совпадение (включая подсовпадения) и возвращает строку замены. Другие уже упоминали, что необходимо избегать скобок.

"Item Name (4)".replace(/\((\d+)\)/, function(fullMatch, n) {
    return "(" + (Number(n) + 1) + ")";
});

Итак,

* редактировать:

это должно работать

"product[0][0][3][title]".replace(/(^product\[\d+\]\[\d+\]\[)(\d+)(\]\[.+\])/, function(fullMatch, n, a, o) {
    return n + (Number(a) + 1) + o;
});
1 голос
/ 16 декабря 2009

На основании ответа Эндрю , но исправлено, чтобы вернуть всю строку:

"product[0][0][3][title]".replace (
    /^(product\[\d+\]\[\d+\]\[)(\d+)(\]\[.+\])/,
    function(fullMatch, pre, n, post) {
        return pre + (Number(n) + 1) + post;
    }
);
1 голос
/ 16 декабря 2009

Более итеративный подход:

r = /^(product\[\d+\]\[\d+\]\[)(\d+)(\]\[[a-z]+\])$/;
m = s.match(r);
if (!m) { /* do something smart; */ }
s.replace(r, "$1" + (Number(m[2]) + 1) + "$3");

Я добавил группу захвата в голову и хвост вашего регулярного выражения. Затем сопоставьте, увеличьте и снова соберите строку.

+ 1 для функции соответствия в регулярном выражении, хотя я не знал этого трюка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...