我有以下要求:
我有一个网址
var url = '/test/mybin/processes/{testName}/test?id={testId}';
网址中可以包含任意数量的{}
。让我们说上面有两个地方{}
和{testName}
{testId}
。它可以有任意数量的此类参数。
我需要用真实值替换每个这样的参数的值。
我需要首先知道每个{}
内的属性名称,并在加载网址之前用实际值替换它们。
让我们在上面的示例中说,我必须先在{}中提取每个属性的名称,然后用实际值替换它们。
在我的方法中:
testName="Test"
和testId=1
所以,我希望url值为
'/test/mybin/processes/Test/test?id=1'.
你能告诉我实现这个目标的最佳途径吗?
谢谢,Tani
答案 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;
}