Javascript 使用RegExp匹配括号中的数字,然后将其递增

Javascript 使用RegExp匹配括号中的数字,然后将其递增,javascript,regex,string,Javascript,Regex,String,我一直在试图找到一种方法来匹配Javascript字符串中的一个数字,该字符串的末尾用括号括起来,然后递增 假设我有一个字符串: var name = "Item Name (4)"; 我需要一个RegExp来匹配(4)部分,然后我需要增加4,然后将其放回字符串中 这是我到目前为止的正则表达式: \b([0-9]+)$\b 这个正则表达式不起作用。此外,我不知道如何提取检索到的整数并将其放回字符串中的同一位置 谢谢。我只能想出一种方法,分为三个步骤:提取、增量和替换 // Tested on

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

假设我有一个字符串:

var name = "Item Name (4)";
我需要一个RegExp来匹配(4)部分,然后我需要增加4,然后将其放回字符串中

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

\b([0-9]+)$\b
这个正则表达式不起作用。此外,我不知道如何提取检索到的整数并将其放回字符串中的同一位置


谢谢。

我只能想出一种方法,分为三个步骤:提取、增量和替换

// 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 + ")");
该模式的重要部分包括:

  • 您需要转义paren以匹配文字paren
  • 您还需要使用parens来捕获数字,以便从匹配中提取它
  • \d匹配一个数字,比写出[0-9]更短、更常见
  • 'var name=“项目名称(4)”。替换(/\([\d]+)\)/,1+$1)


    (未经测试)

    为了使此模式正常工作,您应该将括号括起来。此外,不需要\b和$。因此

    var s = "Item Name (4)"; 
    var match = /\((\d+)\)/.exec( s ); 
    var n = Number(match[1])+1; 
    alert( s.replace( /\(\d+\)/, '('+n+')' ) );
    
    david.clarke的解决方案(已测试)

    但我觉得它太简洁了


    UPD:原来RegExp.$1不能用作replace参数的一部分,因为它只在Opera中工作

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

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

    您的regexp语法是否要求您转义文字'('s and')?有些是的。我会调查的,不过我还需要其他方面的帮助。谢谢你!数字的求值和增量从来不是用regexp完成的,而是用手边的编程语言完成的。Regexo只查找和替换字符串,不能进行算术运算。不过它更为简洁;-)不起作用,因为
    $1
    是一个字符串(即使它不是语法错误)。1+RegExp.$1始终为我返回1。这是正确的方法。通常,replace的函数形式是将内置regexp扫描器的功能与用户定义函数的自由形式功能结合起来的唯一方便方法。我甚至使用闭包将replace()作为“有状态”函数。
    "Item Name (4)".replace(/\((\d+)\)/, function(fullMatch, n) {
        return "(" + (Number(n) + 1) + ")";
    });