Javascript替换为$1作为变量
我有以下情况: 某个字符串包含一些变量,例如:Javascript替换为$1作为变量,javascript,regex,Javascript,Regex,我有以下情况: 某个字符串包含一些变量,例如: var string = '/page/{id}/{title}'; 现在,我希望能够用以下数组中的变量替换{id}和{title}: var arr = {'id':10, 'title':'test-page'}; 我想出了一个小小的正则表达式: string.replace ( /{([a-zA-Z0-9]+)}/g , '$1' ); 正如预期的那样,它只返回以下内容: /page/id/title 所以我试了一下: string.
var string = '/page/{id}/{title}';
现在,我希望能够用以下数组中的变量替换{id}和{title}:
var arr = {'id':10, 'title':'test-page'};
我想出了一个小小的正则表达式:
string.replace ( /{([a-zA-Z0-9]+)}/g , '$1' );
正如预期的那样,它只返回以下内容:
/page/id/title
所以我试了一下:
string.replace ( /{([a-zA-Z0-9]+)}/g , arr [ '$1' ] );
但这也带来了一个问题
/page/undefined/undefined
现在,我知道这样的事情可能会有一个循环等,但它会很好地有一个线性为这一点。我不太习惯JS,所以我希望有一些我不知道的功能或选项可以帮助我解决这个问题:)
致以最良好的祝愿 试试这样的方法:
var arr = {'id':10, 'title':'test-page'};
'/page/{id}/{title}'.replace(/\{([\w\d]+?)\}/g, function(a, b) {
return arr[b] || '';
});
'/page/{id}/{title}'.template(arr);
如果您经常使用这个replace,我会创建一个String
helper原型方法。例如:
String.prototype.template = function(data) {
return this.replace(/\{([\w\d]+?)\}/g, function(a, b) {
return data[b] || '';
});
};
然后像这样使用它:
var arr = {'id':10, 'title':'test-page'};
'/page/{id}/{title}'.replace(/\{([\w\d]+?)\}/g, function(a, b) {
return arr[b] || '';
});
'/page/{id}/{title}'.template(arr);
根据,
因为我们想更进一步
在完成最终替换之前转换匹配结果
我们必须使用一个函数。这将强制对比赛进行评估
在toLowerCase()
方法之前。如果我们尝试使用
没有函数的匹配,toLowerCase()
将无效
(在上面的文本中,将toLowerCase()
替换为“访问对象中的属性”)
然后,你可以使用
function replacer(match, p1, p2, p3/*, ...*/, offset, string){
return arr[p1];
}
var arr = {'id':10, 'title':'test-page'};
'/page/{id}/{title}'.replace(/\{([\w\d]+?)\}/g, replacer);
非常感谢先生,现在我可以回去工作了:)!您的编辑确实是一个更好的解决方案。您可能希望处理传入对象中不存在
{tag}
的情况,这比现在要优雅一点。@jfriend00例如。根据我的口味,如果{tag}
不存在,最好将其完全剥离。有棱角的就可以了,手杖。@dfsq-剥皮就可以了。如果标记不在对象中,您现在所做的就是插入“undefined”。哦,您是指第一个示例!是的,你是对的,我在看原型代码。非常感谢。