我在其中一个网络应用中添加了一个新字段,供访问者添加产品。推送“添加产品”克隆现有输入之一,并将其设置为空白值。
但我需要更新名称。名称采用以下格式:
<input type="text" name="product[0][0][3][title]" value="my product" id="input-AbGHtQS3" maxlength="150" />
我需要增加最后一个数字索引,即本例中的3。
我写了一个正则表达式来匹配相应的字符,但是如何递增最后一个数字呢?
这是我的正则表达式:
/^product\[\d+\]\[\d+\]\[(\d+)\]\[.+\]/
我怎么能增加最后一个数字?
答案 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;
}
);