搜索并替换特定模式

Search and replace for a specific pattern

本文关键字:模式 替换 搜索      更新时间:2023-09-26

我有以下要求:

我有一个作为的url

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

url中可以包含任意数量的{}。比如说,上面的{}位于{testName}{testId}的两个位置。它可以有任意数量的此类参数。

我需要用实际值替换每个这样的params的值。在加载url之前,我需要首先知道每个{}中的属性名称,并将其替换为实际值。

比方说,在上面的例子中,我必须首先提取{}中每个属性的名称,并用实际值替换它们。

在我的方法中:

testName="Test"testId=1

所以,我希望url值是

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

你能告诉我实现这一目标的最佳方法吗?

谢谢,Tani

像这样的东西应该可以做到:

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>正则表达式与String.protoype.replacement()相结合是一种很好的方法:
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