给出以下字符串
XXXX Units[4].Test XXXX
我想用Unit[x]
替换Unit[x+1]
的每一次出现
我正在尝试使用正则表达式实现此目的,因为名称Units
需要首先按字面匹配。
我正在尝试这样的事情:
test.replace(/(?:Units\[|\_+)(\d+)/g, function(m, i) { return parseInt(m) + 1 })
我的问题是,如果没有积极的外观,我似乎无法只匹配数字。我试图以这样的方式构建正则表达式,即只有数字形成捕获组的一部分,因此我可以替换它们。
在c#中很容易做到,但javascript匹配功能的工作方式略有不同。
尽管(?:
的非捕获规范,Units[
似乎构成了匹配的一部分。由于javascript不支持后面的内容,我不知道如何完成此操作。
答案 0 :(得分:3)
您需要在编号之前对零件进行分组,并在以后使用该反向参考:
test = test.replace(/(Units\[)(\d+)/ig, function($0, $1, $2) {
return $1 + (parseInt($2)+1); })
//=> XXXX Units[5].Test XXXX
请注意在回调函数中使用$1
和$2
,其中$1
代表值Units[
,$2
是后面的数字。