使用Javascript正确解析函数中的文本

使用Javascript正确解析函数中的文本,javascript,regex,string,parsing,Javascript,Regex,String,Parsing,我收到另一个软件程序的一组文本函数,我需要修改并保存这些函数,我正在努力找到最好的方法 我可以收到这样的文本: Sum(收入)+Sum({}COGS) 我希望能够在Sum(后面不紧跟{的地方直接添加文本。您可以在Sum()的括号内捕获单词,并替换它: const input\u text=“text\u我想添加”; const text=`Sum(Revenue)+Sum({}COGS)`; const result=text.replace(/Sum\(\w+\)/g,match=>Sum(

我收到另一个软件程序的一组文本函数,我需要修改并保存这些函数,我正在努力找到最好的方法

我可以收到这样的文本:

Sum(收入)+Sum({}COGS)


我希望能够在
Sum(
后面不紧跟
{的地方直接添加文本。您可以在
Sum()的括号内捕获
单词
,并替换它:

const input\u text=“text\u我想添加”;
const text=`Sum(Revenue)+Sum({}COGS)`;
const result=text.replace(/Sum\(\w+\)/g,match=>Sum(${input\u text})`);

console.log(result);
您需要学习该语言的语法,为其编写解析器,操作AST并从AST生成代码。这不是一个“简单”的过程,但这是唯一可靠的方法。这是一个很好的开始,但是它仍然不能正常工作。例如,如果我的文本变量看起来像这样,那么它就不会拾取它:
'Sum([UNITS IN INVENTORY]*[Cost of good])”
我还需要保留Sum()文本中的任何文本。。
let text = `Sum(Revenue) + Sum({<CostCentre={'$(=Sum(FIELD))'}>}COGS)`;
let input_text = 'TEXT_I_WANT_TO_ADD ';
let split_text = 'Sum('
let split = text.split(split_text);
console.log(split);
let final_text = '';
for (let i in split) {
  let split_modified;
  // Not last item
  if (i < split.length - 1) {
    let next = (parseInt(i) + parseInt(1));
    // Does not include {<
    console.log(next, split[next]);
    if (!split[next].includes('{<')) {
      final_text += split_text + input_text;
    }
    // Does include {<
    else {
      final_text += split_text + split[next]
    }
  }
  // Last item
  else {
    final_text += split[i]
  }
}
console.log(final_text);