[英]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
我有兩個不同的問題:
String.match
代碼行中的正則表達式只計算一次花括號{something}
。 如何修改它以查找一組雙花括號 {{something}}?
我已經有了結果數組。 進行字符串替換的最佳方法是什么,以便將查詢及其隨附的每組雙括號替換為其相應的結果?
您可以使用以下模式替換,
{{(.+?)}}
{{
-匹配{{
(.+?)
-匹配除換行符以外的任何其他內容一次或多次 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.