首页 > 解决方案 > 使用 Javascript 正确解析函数内的文本

问题描述

我收到了另一个软件程序的一组文本功能,我需要对其进行修改然后保存,并试图找到执行此操作的最佳方法。

我可以收到这样的文字:

Sum(Revenue) + Sum({<CostCentre={'$(=Sum(FIELD))'}>}COGS)

我希望能够在Sum(没有立即跟随的文本之后直接添加文本{<理想情况下我的最终结果是这样的:

Sum(TEXT_I_WANT_TO_ADD Revenue) + Sum({<CostCentre={'$(=Sum(TEXT_I_WANT_TO_ADD FIELD))'}>}COGS)

任何想法如何以简单的方式实现这一目标?到目前为止,我唯一的想法是使用 split 然后查看数组的下一个对象以确定它是否包含{<,但是我想知道是否有更简单的方法可以做到这一点。

我的尝试(有效,但很难遵循,不确定它是否总是有效):

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);

任何想法如何做到这一点是更好,更简单的方法?

标签: javascriptregexstringparsing

解决方案


您可以捕获word括号内的内容Sum()并替换它:

const input_text = "TEXT_I_WANT_TO_ADD ";
const text = `Sum(Revenue) + Sum({<CostCentre={'$(=Sum(FIELD))'}>}COGS)`;

const result = text.replace(/Sum\(\w+\)/g, match => `Sum(${input_text})`);

console.log(result);


推荐阅读