Javascript 来自正则表达式的模板字符串
假设我有以下URL路径:Javascript 来自正则表达式的模板字符串,javascript,regex,templating,Javascript,Regex,Templating,假设我有以下URL路径: /api/resource/:id 给定上下文对象{id:1},路径将转换为/api/resource/1 现在我想构建一个更复杂的路径模板: /api/resource/:id(/relationships/:name)? 此处,关系成员是可选的,以便两个上下文可以匹配: {id:1,name:'rel1'}将构建字符串/api/resource/1/relationships/rel1 {id:1}仍应生成字符串/api/resource/1 我希望能够使用
/api/resource/:id
给定上下文对象{id:1}
,路径将转换为/api/resource/1
现在我想构建一个更复杂的路径模板:
/api/resource/:id(/relationships/:name)?
此处,关系
成员是可选的,以便两个上下文可以匹配:
将构建字符串{id:1,name:'rel1'}
/api/resource/1/relationships/rel1
仍应生成字符串{id:1}
/api/resource/1
如何实现这样的模板引擎?在node.js中,您只需定义两个不同的模板:
routes.route('/api/resource/:id')
.get....
routes.route('/api/resource/:id/relationships/:name')
.get...
但是,正如trincot所提到的,如果您说明了构建此功能所使用的框架,这将非常有帮助。您可以在
中使用正则表达式,将替换为回调函数:
函数applyTemplate(模板,obj){
返回模板。替换(/\([^()]*):(\w+)([^()]*)\)\?\124;:(\ w+)/g,
函数(匹配、前、名1、后、名2){
设name=name1 | | name2;
在obj中返回name?(在| |“”)+obj[name]+(在| |“”)之后):“”;
});
}
var结果,
template=“/api/resource/:id(/relationships/:name)?”;
结果=applyTemplate(模板,{id:1,名称:'rel1'});
控制台日志(结果);
结果=applyTemplate(模板,{id:1});
控制台日志(结果)代码>事实上,我已经找到了完全符合我要求的解决方案。您是在使用任何特定的模板解决方案,还是在实现自己的模板解决方案?