使用RegExp匹配括号,然后递增

我一直在试图找到一种方法来匹配字符串末尾的圆括号所包围的Javascript字符串中的数字,然后对其进行增量。

说我有一个字符串:

var name = "Item Name (4)";

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

这是我迄今为止的正则表达式:

b([0-9]+)$b

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

谢谢。


替换方法可以将函数作为第二个参数。 它获得匹配(包括子匹配)并返回替换字符串。 其他人已经提到,括号需要逃避。

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

我只能通过三个步骤来思考一个方法:提取,增量和替换。

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

模式的重要部分:

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

  • 为了这个模式工作,你应该逃避括号。 另外 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中使用

    链接地址: http://www.djcxy.com/p/76817.html

    上一篇: Use RegExp to match a parenthetical number then increment it

    下一篇: Javascript Regex: How to put a variable inside a regular expression?