首页 > 解决方案 > 如何在JS中替换字符串公式中的整数

问题描述

我想替换字符串公式中的整数来评估表达式。

我有一个数组,例如

var value_array=[
{value: "11", order: "1"},
{value: "4", order: "2"},
{value: "31", order: "3"},
{value: "41", order: "4"},
{value: "51", order: "5"},
{value: "61", order: "6"},
{value: "71", order: "7"},
{value: "80", order: "8"},
{value: "91", order: "9"},
{value: "101", order: "10"},
{value: "111", order: "11"},
{value: "128", order: "12"},
{value: "131", order: "13"},
{value: "145", order: "14"}
];

我的公式是((1+14)*5+12*3-7*8/2+4)

我想用相应的顺序值替换整数。

我应该得到((11+145)*51+128*31-71*80/4+41),然后我将评估由 10545 产生的字符串。

谢谢你的帮助

标签: javascript

解决方案


尝试replacefind

let str = `((1+14)*5+12*3-7*8/2+4)`
let value_array = [
  { value: '11', order: '1' },
  { value: '4', order: '2' },
  { value: '31', order: '3' },
  { value: '41', order: '4' },
  { value: '51', order: '5' },
  { value: '61', order: '6' },
  { value: '71', order: '7' },
  { value: '80', order: '8' },
  { value: '91', order: '9' },
  { value: '101', order: '10' },
  { value: '111', order: '11' },
  { value: '128', order: '12' },
  { value: '131', order: '13' },
  { value: '145', order: '14' }
]
let res = str.replace(/([^\d]*?)(\d+)([^\d]*?)/g, (...args) => {
  return args[1] + value_array.find(o => o.order === args[2]).value + args[3]
})
console.log(res)

这是babel改造的 es5 版本

var str = '((1+14)*5+12*3-7*8/2+4)';
var value_array = [{ value: '11', order: '1' }, { value: '4', order: '2' }, { value: '31', order: '3' }, { value: '41', order: '4' }, { value: '51', order: '5' }, { value: '61', order: '6' }, { value: '71', order: '7' }, { value: '80', order: '8' }, { value: '91', order: '9' }, { value: '101', order: '10' }, { value: '111', order: '11' }, { value: '128', order: '12' }, { value: '131', order: '13' }, { value: '145', order: '14' }];
var res = str.replace(/([^\d]*?)(\d+)([^\d]*?)/g, function () {
  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  return args[1] + value_array.find(function (o) {
    return o.order === args[2];
  }).value + args[3];
});
console.log(res);


推荐阅读