繁体   English   中英

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

[英]Processing and replacing text inside double curly braces

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

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

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

 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作为对象,因此,如果您可以更改解析函数,请考虑从解析中返回一个对象,以便轻松查找和替换值

也适用于嵌套对象的通用解决方案。

function replaceText(text, obj, start = '{{', end = '}}') {
  return text.replace(new RegExp(`${start}(.+?)${end}`, 'g'), (_, part) => {
    return part.split('.')
      .reduce((o, k) => (
        o || {}
      )[k], obj);
  });
}

console.log(replaceText(
  'Hello my name is {{name.first}} {{name.last}}, age: {{age}}',
  {
    name: {
      first: 'first', last: 'last'
    },
    age: 20,
  }
));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM