使用RegEx匹配括号,然后递增它

时间:2009-01-08 03:04:21

标签: javascript regex string

我一直在尝试找到一种方法来匹配字符串末尾用括号括起来的Javascript字符串中的数字,然后递增它。

说我有一个字符串:

var name = "Item Name (4)";

我需要一个RegExp来匹配(4)部分,然后我需要增加4然后将它放回到字符串中。

这是我到目前为止的正则表达式:

\b([0-9]+)$\b

这个正则表达式不起作用。此外,我不知道如何提取检索到的整数并将其放回字符串中的相同位置。

感谢。

4 个答案:

答案 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 + ")");

模式的重要部分:

  1. 你需要逃避parens以匹配文字的parens
  2. 您还需要使用parens来捕获数字,以便您可以从匹配中提取它。
  3. \ d匹配一个数字,比写出[0-9]更短,更常见。

答案 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);

(未测试的)