Правильный синтаксический анализ текста в функции с помощью Javascript - PullRequest
0 голосов
/ 23 сентября 2019

Я получаю текстовый набор функций для другой программы, который мне нужно изменить, а затем сохранить, и я пытаюсь найти лучший способ сделать это.

Я мог бы получить такой текст:

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

Есть идеи, как сделать это лучше и проще?

1 Ответ

0 голосов
/ 23 сентября 2019

Вы можете захватить 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...