在javascript中,如果某个字符串的方括号内有任何占位符,如何将其更改为新字符串?

在javascript中,如果某个字符串的方括号内有任何占位符,如何将其更改为新字符串?,javascript,Javascript,我从数据库中获取parameterisedString的值,parameterisedString在同一字符串中包含一些在花括号内没有方括号的占位符,例如{Group},以及一些在花括号内有方括号的占位符,例如{termMonth[month]} 例如: parameterisedString='{Group}{Desc}-{termMonth[month]}-{termOdometer[kms]}{[$]免赔额[version]}{免赔额类型}' 只带方括号的占位符(例如{Group})不需要

我从数据库中获取parameterisedString的值,parameterisedString在同一字符串中包含一些在花括号内没有方括号的占位符,例如{Group},以及一些在花括号内有方括号的占位符,例如{termMonth[month]}

例如: parameterisedString='{Group}{Desc}-{termMonth[month]}-{termOdometer[kms]}{[$]免赔额[version]}{免赔额类型}'

只带方括号的占位符(例如{Group})不需要替换或更改,但每个带方括号的占位符(例如{TERMMOUNT[MOUNT]})都应该转换为{TERMMOUNT}占位符和方括号内的文本应传递给getTranslation函数,以获得该单词的翻译,并且不应进行插值。 e、 g{termMonth[month]}:{termMonth}应替换或更改为{termMonth},而“month”应替换为该词的翻译

现在所需的值应该是:
ParameterizedString='{Group}{Desc}-{termMonth}mois-{termOdometer}kms USD${EquiredAmount}couverture{EquiredType}'

buildTitle(dealProduct:DealProductModel,titleSuffix:boolean=false){
//例如:
让parameterisedString='{Group}{Desc}-{termMonth[month]}-{termOdometer[kms]}{[$]免赔额[version]}{免赔额类型}';
常数对=[
['{Group}',`${dealProduct.name}`],
['{Desc}',`${dealProduct.coverageName}`],
['{termMonth}',`${dealProduct.termMonths}`],
['{termOdometer}',`${dealProduct.termOdometer.toLocaleString()}`],
['{EquiredAmount}',`${dealProduct.EquiredAmount}EquiredAmount`],
['{EveribleType}',`${dealProduct.EveribleType}`]
];
//这里我需要更改的ParameterizedString,在插入之前,它应该将所有单词翻译成方括号。现在需要的是:
ParameterizedString='{Group}{Desc}-{termMonth}mois-{termOdometer}kms USD${EquiredAmount}couverture{EquiredType}';
//插入字符串
让钥匙,瓦尔;
for(设i=0;i}
对于特定的
{relibleAmount}{[$]可抵扣类型[coverage]}
与字符串其余部分的格式不同。。但是,如果格式为常量。。我有你的答案

let parameterisedString='{Group}{Desc}-{termMonth[month]}-{termOdometer[kms]}{leverbeamount[$]}{leverbetype[coverage]}'
pm=参数化字符串。拆分(“”)
var arr=[]
让translate=arrOfText=>arrOfText//接收一个文本数组,其中包含空格键,然后是方括号中某个术语的字符。。例如,[,“m”,“o”,“n”,“t”,“h”]
while(pm.includes('[')和&pm.includes(']')){
var curlyVar=pm.splice(0,pm.indexOf('[')-1)
curlyVar.push(“}”)
var bracketVar=pm.splice(pm.indexOf('[')-1,pm.indexOf(']')+2)
支架变量拼接(1,1)
支架变量拼接(支架变量长度-2,2)
bracketVar=translate(bracketVar)//在这里可以将值eg[“”、“m”、“o”、“n”、“t”、“h”]转换为[“”、“m”、“o”、“i”、“s”]
arr=arr.concat(curlyVar)
arr=arr.concat(括号变量)
}
ParameterizedString=arr.join(“”)

log(parameterisedString)
您可以使用正则表达式查找所有出现的{TERM},然后拆分它,如果单词以“[”开头,则用翻译替换它,如果不在{}之间返回它

函数更改模板(模板){
返回模板。替换(/{(.*)}/g,(匹配,模板)=>{
返回模板.split(/\s+/).map(word=>{
返回word.startsWith('[')?getTranslation(word.slice(1,-1)):`{${word}`
}).加入(“”);
})
}
//模拟翻译
常量翻译={
月份:“mois”,
kms:“kms”,
$:“USD$”,
版本:“couverture”
};
函数getTranslation(字符串){
返回翻译[字符串]| |字符串;
}
让parameterisedString='{Group}{Desc}-{termMonth[month]}-{termOdometer[kms]}{[$]免赔额[version]}{免赔额类型}';

console.log(changeTemplate(parameterisedString));
为什么
[$]
{wordHere}
的开头,而所有其他
[texthhere]
都在花括号中,我基本上是在我的pairs数组中生成键值,该数组将在插值循环中替换。我使用$使它成为每对的文本模板。{relibleAmount}不是{relibleAmount[$]}。relibleType有两个值要转换。[$]和[coverage],我知道了。我将尝试更改它,以便代码works@KarimAli请告诉我把[$]放在左边和[coverage]放在右边的逻辑是什么..是因为它们在单词的左边和右边吗?{[$]类型[coverage]}的意思是[$]应该翻译,类型应该插入,[coverage]应该翻译。整个ParameterizedString来自数据库,基于每个产品的一些规则。好的,让我澄清我的问题。花括号内的所有内容右边都有方括号内容,例如
{termMonth[month]}
{termMonth}month
现在我的问题是为什么
{[$]免赔额类型[coverage]}
会变成
${免赔额类型}覆盖范围
而不是
{免赔额类型}$coverage
sney2002你就是那个人。如果API团队在{[$],免赔额,[version]]内发送逗号,那么只有一个问题了那么我们如何得到这样的结果:USD${EquiredAmount}couverture?@KarimAli您可以更改正则表达式以包含逗号t