给定以下字符串

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 match函数的工作方式略有不同。

尽管没有(?:的捕获规范,但Units[似乎是比赛的一部分。由于javascript不支持后退,因此我不知如何完成此操作。

最佳答案

您需要在编号之前对零件进行分组,并在以后的替换中使用该反向参考:

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是其后的数字。

关于javascript - 使用javascript正则表达式替换和增加整数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36134698/

10-11 05:40