给定以下字符串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/