首页 > 解决方案 > 处理和替换双花括号内的文本

问题描述

我有一个 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. 我已经有了一系列结果。进行字符串替换的最佳方法是什么,以便将查询及其随附的每组双括号替换为其相应的结果?

标签: javascriptnode.jsregex

解决方案


您可以使用以下模式替换,

{{(.+?)}}
  • {{- 火柴{{
  • (.+?)- 一次或多次匹配除换行符以外的任何内容

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))

注意:-我在这里使用结果作为对象,因此查找和替换值变得容易,如果您可以更改解析函数,请考虑从解析返回一个对象


推荐阅读