dmc1989
@dmc1989

Как отрезать нужную часть строки в математической строке?

Пытаюсь отрезать только 4-ю вложенность, но получается не то(
Что сделать, чтобы получить (378 + 21) (в конце) ?
5f6cc2e1b660b183021737.png
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
WblCHA
@WblCHA
С учётом того, что глубина может меняться в любом порядке в середине выражения (к примеру: 0>1>2>3>2>3>4>3>2>3>4>3>2>1>0), то чисто регулярными выражениями данную задачу не решить (во всяком случае я не знаю способа вести подсчёт в них).
С использованием JS это решается довольно просто.
Как вариант:
const getLevel = (str, level) => {
  const breckets = [...str.matchAll(/[()]/g)];
  
  let currentLevel = 0;
  let startLevelIndex = 0;
  const results = [];
  
  breckets.forEach((b) => {
    if(b[0] === '(') {
      currentLevel++;
      if(currentLevel === level) {
        startLevelIndex = b.index + 1;
      }
      return;
    }
    if(currentLevel === level) {
      results.push(str.slice(startLevelIndex, b.index));
    }
    currentLevel--;
  });
  
  return results;
}
const testStr = '0 + (1 + 1 + (2 + (3 + 3 + (4 + 4) + 3) + 2 + (3 + (4 + 4 + 4) + (4 + (5 + 5) + 4) + 3) + 2) + 1) + 0 + (1 + 1)';
getLevel(testStr, 4);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Poznakomlus
@Poznakomlus
Программист: php, js, go
let str = `(8-9)(7-0)(378+21))))`;
console.log(str.replace(/^.*\((\d+[+-:*]{1}\d+)\){4}/, '$1'));
// 378+21

вариант
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы