Javascript 来自正则表达式的模板字符串

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 我希望能够使用

假设我有以下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
我希望能够使用一组有限的正则表达式构建这样的字符串


如何实现这样的模板引擎?

在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});

控制台日志(结果)事实上,我已经找到了完全符合我要求的解决方案。

您是在使用任何特定的模板解决方案,还是在实现自己的模板解决方案?