我有一个文字
name[one][1][two][45][text]
我抓住了文字" 45"使用这种模式
/(.*?)rows\]\[([0-9]*)(.*)/;
但是如何用其他任何数字替换唯一的45?因为如果我使用相同的模式和替换方法,它将替换entrire前一个单词。我的代码是
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] [text]
答案 0 :(得分:1)
答案 1 :(得分:1)
但是如何用其他任何数字替换唯一的45?
您可以将replace函数与匹配的组一起使用:
例如 - 在此我将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):you can do this:
return b+c+(parseInt(d)+2)+e; -- to your actual example
答案 2 :(得分:0)
String.replace允许function作为第二个参数,将为每个正则表达式匹配调用。您可以在该功能内执行添加(或任何其他计算) 通过略微修改正则表达式,使用不同的捕获组,您可以实现这一点 - 试试这个 -
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]"
答案 3 :(得分:0)
你可以这样做:
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]");)