搜索并替换特定模式

时间:2014-09-17 17:25:09

标签: javascript

我有以下要求:

我有一个网址

var url = '/test/mybin/processes/{testName}/test?id={testId}';

网址中可以包含任意数量的{}。让我们说上面有两个地方{}{testName} {testId}。它可以有任意数量的此类参数。

我需要用真实值替换每个这样的参数的值。 我需要首先知道每个{}内的属性名称,并在加载网址之前用实际值替换它们。

让我们在上面的示例中说,我必须先在{}中提取每个属性的名称,然后用实际值替换它们。

在我的方法中:

testName="Test"testId=1

所以,我希望url值为

'/test/mybin/processes/Test/test?id=1'.

你能告诉我实现这个目标的最佳途径吗?

谢谢,Tani

2 个答案:

答案 0 :(得分:0)

这样的事情可以解决问题:



var obj = { testName : "mytest", testId:1 };

var url = '/test/mybin/processes/{testName}/test?id={testId}';

var regex = /{(.*?)}/g;

var replaced = url.replace(regex, function(m,p1) {
      return obj[p1];
  });

alert(replaced);




正则表达式/{(.*?)}/将匹配花括号(非贪婪)之间的任何内容,并将内容放入可以替换的组中。

您的评论中的正则表达式可以通过/g标记的附加内容轻松修复:

/\{[^\}]*\}/g

但您可能会发现为分组添加括号更容易,以便更容易在没有大括号本身的情况下提取大括号之间的实际内容:

/\{([^\}]*)\}/g

另请注意,在此上下文中,正则表达式中的{}不需要转义,但包含转义符\ <并不会造成伤害/ p>

答案 1 :(得分:0)

结合String.protoype.replace()的正则表达式是一个很好的方法:

function f(map,url) {
    var pattern = /{(\w+)}/g;
    var replacer = function(a,b){
        return map[b];
    };
    var o = url.replace(pattern,replacer);
    return o;
}

http://jsfiddle.net/sean9999/poctcdLp