Javascript 给定json中字符串中的变量替换

Javascript 给定json中字符串中的变量替换,javascript,regex,string,replace,Javascript,Regex,String,Replace,大家好,在这个问题上需要一些帮助,我有一个公式字符串(PerirRateP001\u 0+PerirRateP002\u 1+PerirRateP003\u 2+PerirRateP004\u 3)*SumInsurated*1*(0.01),我还提供了json scope { BasicRate: '0.0512', PerilRate: [ { 'Perils Code': 'AIRCRAFT DAMAGE', 'Basis Indicator': 'P' } ], Clause

大家好,在这个问题上需要一些帮助,我有一个公式字符串(PerirRateP001\u 0+PerirRateP002\u 1+PerirRateP003\u 2+PerirRateP004\u 3)*SumInsurated*1*(0.01),我还提供了json

scope {
  BasicRate: '0.0512',
  PerilRate: [ { 'Perils Code': 'AIRCRAFT DAMAGE', 'Basis Indicator': 'P' } ],
  ClauseRate: [
    {
      ClauseCode: 'SMOKE DAMAGE',
      'Basis Indicator': 'P',
      ApplyTo: 'F&L'
    }
  ],
  'Questionnaire 1': [ { QuestLoading1: 'Yes' } ],
  SumInsured: '100000',
  ClauseFactorRate: '0.002925',
  PerilRateP001_0: '0.0060',
  ClauseRateC022_0: '10.0000',
  Loading: '10',
  productId: 'FNL0001',
  BasicPremium1: 51.2
}

现在我要做的是,我要替换给定json中公式字符串中变量的值。json没有公式字符串中的所有变量,因此我要做的是,如果变量与+或-符号关联,请将其替换为0,如果变量与*或/符号关联,请将其替换为1。你知道我怎样才能做到吗。两天来一直在努力解决这个问题,但仍然无法找到解决方案。非常感谢使用math.js提供的任何帮助,以下是您可以做到的:

var数据={
基本板条箱:“0.0512”,
危险率:[{‘危险代码’:‘飞机损坏’,‘基本指标’:‘P’}],
条款规定:[
{
条款代码:“烟雾损害”,
“基准指标”:“P”,
应用到:“F&L”
}
],
'问卷1':[{QuestLoading1:'是'}],
被保险人:“100000”,
条款系数:“0.002925”,
危险率P001_0:'0.0060',
第22条第0款:“10.0000”,
加载:“10”,
productId:'FNL0001',
基本准则1:51.2
};
var公式='(风险费率P001\u 0+风险费率P002\u 1+风险费率P003\u 2+风险费率P004\u 3)*投保金额*1*(0.01)';
//将公式解析到表达式树中
var formulaTree=math.parse(公式);
//使用筛选器查找公式中存在的变量
var variables=formulaTree.filter(函数(节点){
//检查节点是否为变量
if(node.isSymbolNode){
//检查变量是否在数据数组中
if(数据[node.name]){
公式=公式.replace(node.name,data[node.name]);
}
否则{
//将缺少的变量替换为0
公式=公式.replace(node.name,0);
//将乘积和除法修正为0
公式=公式。替换('*0','*1');
公式=公式。替换('/0','/1');
}
}
});
console.log(公式);
console.log(数学评估(公式))

最具弹性的解决方案是表达式解析器,特别是当您需要对其求值时(避免
eval
)。这不是JSON。这是您的实际数据格式吗?@DaveNewton我正在使用math.js库,可以使用evaluate和parse等方法,但我不确定如何正确使用parse。解析函数是否足以解决上述问题?@str我在这里发布的内容就是控制台中显示的内容。实际数据仅为json,是否总是相同的等式?或者至少在等式中总是相同的变量?这对于MathJS已经做的事情来说是一个很大的工作。完全删除变量对于调试来说很好,但对于数学来说毫无用处。但问题是找到公式中的未知变量并用1或0替换。我不确定math.js evaluate方法能否直接做到这一点……不,它不会——你是对的,我错过了问题底部的信息。解析就是答案。