处理和替换双大括号内的文本

时间:2019-06-21 18:21:58

标签: javascript node.js regex

我有一个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

我有两个独立的问题:

  1. String.match行中的正则表达式仅计算一组大括号{something}。如何修改它以寻找一组双大括号{{something}}?

  2. 我已经有了结果数组。最好的方式是进行字符串替换,以便将查询及其附带的双括号中的每组都替换为其相应的结果?

1 个答案:

答案 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返回对象