Получить арифметические операторы и два числа после него

Необходимо получить все совпадения по арифметическому оператору (- + * /) и двум числам после него(в числах может присутствовать e-). К примеру есть строка:
+ / + -2 2 -2 / - 3 2 + 1 0 / -18733.675923168783e-7 3512411.820180601
Из нее необходимо получить:
+ -2 2 , - 3 2, + 1 0, / -18733.675923168783e-7 3512411.820180601

Есть такой код:

/[+*-\/] \-?[\d.e-]+ \-?[\d.e-]+/g

Но он вытаскивает:
+ -2 2 , / - 3, + 1 0, / -18733.675923168783e-7 3512411.820180601
Как можно это исправить?


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Используйте

/[+*\/-]\s+-?\d*\.?\d+(?:e[+-]?\d+)?\s+-?\d*\.?\d+(?:e[+-]?\d+)?/gi

См. пример работы регулярного выражения. Подробности:

  • [+*\/-] - один из символов +, *, / или -
  • \s+ - один и более пробельных символов
  • -? - необязательный символ -
  • \d*\.?\d+ - ноль и более цифр, необязательная точка . и одна и более цифр
  • (?:e[+-]?\d+)? - необязательная последовательность: е, необязательный + или -, одна и более цифр
  • \s+-?\d*\.?\d+(?:e[+-]?\d+)? - то же, что и выше.

См. пример работы JavaScript-кода:

const text = '+ / + -2 2 -2 / - 3 2 + 1 0 / -18733.675923168783e-7 3512411.820180601';
const regex = /[+*\/-]\s+-?\d*\.?\d+(?:e[+-]?\d+)?\s+-?\d*\.?\d+(?:e[+-]?\d+)?/gi;
console.log(text.match(regex));

→ Ссылка