簡體   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