用 JavaScript 正则表达式替换中间内容时遇到麻烦



我有一条短信

name[one][1][two][45][text]

我使用此模式捕获文本"45"

/(.*?)rows][([0-9]*)(.*)/;

但是我怎样才能用任何其他数字替换唯一的 45?因为如果我使用相同的模式和替换方法,它会替换前一个单词。我的代码是

var name = "name[one][1][two][45][text]";
var pattern = /(.*?)two][([0-9]*)(.*)/;
var number = name.match(pattern);
number = parseInt(number[2]);
var replacePattern = /(.*?)two][([0-9]*)/;
var newName = name.replace(replacePattern, parseInt(number + 2));
console.log(newName);

但它返回了47][文本]

但是我怎样才能用任何其他数字替换唯一的 45?

您可以将替换函数与匹配的组一起使用:

例如 — 在这里我将45替换为 7

   "name[one][1][two][45][text]".replace(/(.*?)(two][)([0-9]*)(.*)/,function (a,b,c,d,e){
        // replace 7 with what you want
        return b+c+'7'+e;
    })

结果:

"name[one][3][two][7][text]"

请注意,我添加了()以包括稍后可以添加的其他部分。

编辑:关于您的实际示例(+=2):您可以这样做:

return b+c+(parseInt(d)+2)+e; -- to your actual example

如果您确定只有2数字,那么

([0-9]+)(?!.*?d)

请参阅演示。

https://regex101.com/r/vH0sZ0/1

你可以这样做:

var name = "name[one][1][two][45][text]";
// pattern for matching 2 or more digits inside [ and ]
var pattern = /[([d]{2,})]/;
console.log(name.replace(pattern,"[47]");)

String.replace 允许将函数作为第二个参数,每个正则表达式匹配都会调用该参数。您可以在该函数中执行加法(或任何其他计算).
通过对正则表达式稍作修改,以不同的方式使用捕获组,您可以实现这一点 -试试这个——

name.replace(
    /((?:.*?)two][)([0-9]*)(.*)/g, 
    function(e,p1,p2,p3){
        //Adding the number with 2(As done in the question)
        return p1+(parseInt(p2)+2)+p3
    }
)
> "name[one][2][two][47][text]"

正则表达式演示

最新更新