如何在JavaScript中用公式中的字符串替换整数

时间:2018-07-20 12:20:20

标签: javascript regex str-replace

我想替换字符串公式中的desig值以计算表达式。

我有一个数组,例如:

var value_array = [
  {value: "1", desig: "ABM"},
  {value: "2", desig: "LF"},
  {value: "3", desig: "DM"},
  {value: "4", desig: "CM"},
  {value: "5", desig: "AN"}
];

公式为:

(ABM+ABM)* LF*(DM*LF)+CM+AN *AN/LF                   

我应该得到:

(1+1)* 2*(3*2)+4+5 *5/2

然后我将评估由40,5产生的字符串。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您可以尝试

var value_array = 
[{value: "1", desig: "ABM"},
{value: "2", desig: "LF"},
{value: "3", desig: "DM"},
{value: "4", desig: "CM"},
{value: "5", desig: "AN"}];

let formula =  '(ABM+ABM)* LF*(DM*LF)+CM+AN *AN/LF'

value_array.forEach( item => {
    formula = formula.replace(new RegExp(item.desig,'g'), item.value )
})
console.log( eval( formula ))

答案 1 :(得分:1)

应该使用Dictionnary,而不是使用数组,然后像这样访问所需的行:

var values = {
   "ABM": 1,
    "LF": 2
};

,然后在公式中像这样使用它:

var res = (values["ABM"] * values["LF"]);

答案 2 :(得分:0)

使用正向超前查询仅匹配desig个没有组的单词,并且不匹配,例如,带有ABMS的令牌ABM或类似的内容:

var regexTemplate = "(?<=[^A-Z]|\s)$token(?=[^A-Z]|\s|$)";

var value_array = 
[{value: "1", desig: "ABM"},
{value: "2", desig: "LF"},
{value: "3", desig: "DM"},
{value: "4", desig: "CM"},
{value: "5", desig: "AN"}];

var formula = '(ABM+ABM)* LF*(DM*LF)+CM+AN *AN/LF';

var expr = value_array.reduce(function(acc, v){
   var regex = new RegExp(regexTemplate.replace('$token', v.desig), "g");
   acc = acc.replace(regex, v.value);
   return acc;
}, formula);

console.log(eval(expr));