我一直在尝试找到一种方法来匹配字符串末尾用括号括起来的Javascript字符串中的数字,然后递增它。
说我有一个字符串:
var name = "Item Name (4)";
我需要一个RegExp来匹配(4)部分,然后我需要增加4然后将它放回到字符串中。
这是我到目前为止的正则表达式:
\b([0-9]+)$\b
这个正则表达式不起作用。此外,我不知道如何提取检索到的整数并将其放回字符串中的相同位置。
感谢。
答案 0 :(得分:20)
replace方法可以将函数作为其第二个参数。它获取匹配(包括子匹配)并返回替换字符串。其他人已经提到括号需要转义。
"Item Name (4)".replace(/\((\d+)\)/, function(fullMatch, n) {
return "(" + (Number(n) + 1) + ")";
});
答案 1 :(得分:0)
我只能想到一种方法,分三步:提取,增加和替换。
// Tested on rhino
var name = "Item Name (4)";
var re = /\((\d+)\)/;
match = re.exec(name);
number = parseInt(match[1]) + 1;
name = name.replace(re, "(" + number + ")");
模式的重要部分:
答案 2 :(得分:0)
为了使这个模式起作用,你应该转义转义括号。另外\ b和$是不需要的。因此
var s = "Item Name (4)";
var match = /\((\d+)\)/.exec( s );
var n = Number(match[1])+1;
alert( s.replace( /\(\d+\)/, '('+n+')' ) );
david.clarke的解决方案(已测试)
"Item Name (4)".replace(/\(([0-9]+)\)/, '('+(1+RegExp.$1) + ')');
但我觉得它太简洁了
UPD :事实证明,RegExp。$ 1不能用作替换参数的一部分,因为它仅适用于Opera
答案 3 :(得分:-1)
'var name = "Item Name (4)"'.replace(/\(([\d]+)\)/, 1 + $1);
(未测试的)