正则表达式:将Pattern中的String替换为函数的返回值

时间:2014-04-18 02:16:39

标签: javascript regex string replace

输入:"some random text [[specialthing]] blah blah"

输出:"some random text ANOTHERTEXT blah blah"


目标:

[[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);
                }
            }
        }
    }

解决方案:

    data = "some random text [[specialthing]] blah blah";

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

我正在使用javascript。

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

3 个答案:

答案 0 :(得分:1)

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

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

然后替换为:

'$1'+myFunction($2)+'$3' //this is pseudocode and not actual code

演示:http://regex101.com/r/iC0pK1

答案 1 :(得分:1)

这是你想要的正则表达式的一个有效的javascript版本:

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

以及此处的fiddle

答案 2 :(得分:0)

在这种情况下,正则表达式或多或少地设计为做你想要的。编写逻辑来为你的模式手动替换字符串将是相当多的工作,大量的索引数学和正则表达式使得不必手动执行。