Javascript 寻找与regexp路径完全相反的路径

Javascript 寻找与regexp路径完全相反的路径,javascript,regex,routes,Javascript,Regex,Routes,我正在构建一些API连接器,我希望能够轻松地生成获取URL 我的想法是将我的解决方案基于lib语法,例如injectParams('/foo/:hello',{hello:'world'})return'/foo/world 是否有一个现有的库来执行这种注入?这里,我将用path变量中的值替换每个键(前缀为:) 函数injectParams(路径,obj) { for(obj中的var键){ var rgx=new RegExp(':'+key+'\\b','g'); path=path.re

我正在构建一些API连接器,我希望能够轻松地生成获取URL

我的想法是将我的解决方案基于lib语法,例如
injectParams('/foo/:hello',{hello:'world'})
return
'/foo/world


是否有一个现有的库来执行这种注入?

这里,我将用path变量中的值替换每个键(前缀为:)

函数injectParams(路径,obj)
{
for(obj中的var键){
var rgx=new RegExp(':'+key+'\\b','g');
path=path.replace(rgx,obj[key]);
}
返回路径;
}
var结果;
result=injectParams('/foo/:hello',{hello:'world'})
控制台日志(结果);
//在控制台中打印“/foo/world”
result=injectParams('/foo/:hello/:other',{hello:'world',other:'wroking'});
控制台日志(结果);
//在控制台中打印“/foo/world/workng”
result=injectParams('/foo/:hello/:other/:hello/:hello',{hello:'world',other:'wroking'});
控制台日志(结果);
//打印“/foo/world/wroking/world/world”
结果=injectParams('/foo/:a-b',{“a-b”:“world'})

控制台日志(结果)这将替换所有出现的:键

const injectParams=(路径,obj)=>
路径.替换(/:\w+\??/g,x=>{
const val=obj[x.replace(/:\?/g',)]
如果(val!=未定义)返回val
否则如果(/\?/.test(x))返回“”
else抛出新错误(`Value for'${x}'未指定。`)
})
console.log(injectParams('http://stackoverflow.com/:post?', {}))
console.log(injectParams('http://stackoverflow.com/:post?“,{post:1}”)

console.log(injectParams('http://stackoverflow.com/:post“,{}”)//抛出错误
regexp的路径
当前有api

是否使用任何框架?或者你只需要一个库就可以做到这一点吗?我正在考虑一个库,就像regexp的路径一样简单。确切地说,我正在使用
React样板文件构建一个React(因此它由一个小型express应用程序提供),但任何纯js或节点包都可以。替换行没有什么问题:*如果有两个变量,其中一个是另一个的前缀,它将失败。*如果一个变量出现多次,它将保持不变。最好使用如下内容:path.replace(new RegExp(':'+key+'\\b',g'),obj[key]),假设变量名不包含任何正则表达式特殊字符。@JánHalaša你能给我一个它将在哪里中断的示例吗?@JánHalaša哦,好的。我错过了那个。让我更新您的解决方案。谢谢注意:)。如果你通过了这个{“.*”:“test”}@MaciejKozieja是的,这是一个例外,那么它现在可以正常工作了。但是它对特殊符号的作用已经足够好了。试试injectParams(“/foo/:a-b/”,{“a-b”:“world”})。@JimishFotariya我估计这个键必须是由单词字符组成的,这就是为什么它不起作用,但这会解决它,只要用
/:\w+/g
替换为
/:[-\w]+/g
然后它将与任何不在那里的字符断开&更多它将与任何不在那里的字符断开它将与数字断开事件,但这是有益的,因为你可以像这样链接它们,例如
/foo/:hello/:hello#:foo和-:hello
它只是被设计成这样。@EricBurel如果我正确理解这就是你想要的,选中编辑。