用JavaScript正则表达式替换中间内容时遇到问题?

时间:2015-06-15 10:18:49

标签: javascript regex

我有一个文字

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]

4 个答案:

答案 0 :(得分:1)

如果您确定只有2个号码,那么

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

参见演示。

Handbrake

答案 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;
    })

Result

"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]"

Regex demo

答案 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]");)