如何通过正则表达式增加匹配的数字?

时间:2009-12-16 05:38:12

标签: javascript regex

我在其中一个网络应用中添加了一个新字段,供访问者添加产品。推送“添加产品”克隆现有输入之一,并将其​​设置为空白值。

但我需要更新名称。名称采用以下格式:

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

我需要增加最后一个数字索引,即本例中的3。

我写了一个正则表达式来匹配相应的字符,但是如何递增最后一个数字呢?

这是我的正则表达式:

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

我怎么能增加最后一个数字?

3 个答案:

答案 0 :(得分:10)

来自:Use RegExp to match a parenthetical number then increment it

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 :(得分:1)

更迭代的方法:

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的正则表达式匹配函数虽然,我不知道这个技巧。

答案 2 :(得分:1)

基于Andrew's answer,但已更正为返回整个字符串:

"product[0][0][3][title]".replace (
    /^(product\[\d+\]\[\d+\]\[)(\d+)(\]\[.+\])/,
    function(fullMatch, pre, n, post) {
        return pre + (Number(n) + 1) + post;
    }
);