我有一个URL字符串:
var url = https://url.com/{{query}}/foo/{{query2}}
我有一行代码,可以接受一个字符串,然后得到花括号内所有查询的数组:
var queries = String(url).match(/[^{\}]+(?=})/g);
返回:
queries = ['query', 'query2']
我有一个函数parse(queries)
,该函数处理这些查询并返回其结果列表:
results = ['resultOfQuery', 'resultOfQuery2']
我希望能够使用此列表,然后用其结果替换URL字符串中的查询。该示例的最终结果将是:
url = https://url.com/resultOfQuery/foo/resultOfQuery2
我有两个独立的问题:
String.match
行中的正则表达式仅计算一组大括号{something}
。如何修改它以寻找一组双大括号{{something}}?
我已经有了结果数组。最好的方式是进行字符串替换,以便将查询及其附带的双括号中的每组都替换为其相应的结果?
答案 0 :(得分:1)
您可以使用以下模式替换
{{(.+?)}}
{{
-匹配{{
(.+?)
-一次或多次匹配除换行符之外的所有内容
let url = "https://url.com/{{query}}/foo/{{query2}}"
let result = {'query': 'queryResult1', 'query2':'queryResult2' }
let replaceDoubleBraces = (str,result) =>{
return str.replace(/{{(.+?)}}/g, (_,g1) => result[g1] || g1)
}
console.log(replaceDoubleBraces(url,result))
注意:-我在这里使用result作为对象,因此可以轻松找到和替换值,如果可以更改parse函数,请考虑从parse返回对象