Javascript 正则表达式:替换模式中函数返回值的字符串

Javascript 正则表达式:替换模式中函数返回值的字符串,javascript,regex,string,replace,Javascript,Regex,String,Replace,输入:“一些随机文本[[specialthing]]诸如此类” 输出:“一些随机文本另一个文本废话” 目标: 将[[specialthing]]替换为myFunction('specialthing')将返回 我已经有了一个函数,没有正则表达式就可以做到这一点,但我想知道是否有更简单/更好的方法来做到这一点 我的代码: data = "some random text [[specialthing]] blah blah"; for(var i = 0 ; i < dat

输入:
“一些随机文本[[specialthing]]诸如此类”

输出:
“一些随机文本另一个文本废话”


目标:

[[specialthing]]
替换为
myFunction('specialthing')将返回

我已经有了一个函数,没有正则表达式就可以做到这一点,但我想知道是否有更简单/更好的方法来做到这一点

我的代码:

    data = "some random text [[specialthing]] blah blah";
    for(var i = 0 ; i < data.length ; i++){
        if(data[i] == '[' && data[i+1] == '['){
            var start = i;
            for(var j = start; j < data.length ; j++){
                if(data[j] == ']' && data[j+1] == ']'){
                    var strInBracket = data.slice(start+2,j);
                    var newStr = myFunction(strInBracket);
                    data = data.replace('\[\[' + strInBracket + '\]\]',newStr);
                }
            }
        }
    }
我正在使用javascript


解决方案不需要是正则表达式。

您可以将以下正则表达式匹配为:

([^\[]*)(..[^\]*])(.*)

然后替换为:

'$1'+myFunction($2)+'$3'//这是伪代码,不是实际代码


演示:

在本例中,regex或多或少是为了满足您的需求而设计的。为您的模式手动编写字符串替换的逻辑将需要大量的工作,相对而言,需要大量的索引数学,因此regex不需要手动执行。

以下是您想要的regex的javascript版本:

/(.*)\[\[(.*)\]\](.*)/


下面是一个正在运行的示例

非常感谢。我明白了:D
    data = "some random text [[specialthing]] blah blah";

    var strInBracket = data.match(/([^\[]*)(..[^\]]*..)(.*)/)[2];
    var newStr = myFunction(strInBracket.slice(2,-2));
    data = data.replace(strInBracket,newStr);