Регулярное выражение для числа, возможно, дробного и отрицательного: -?\d+(\.\d+)?. Мы уже разбирали его в предыдущих задачах. Оператор -- это [-+*/]. Заметим, что дефис - идёт в списке первым, так как на любой позиции, кроме первой и последней, он имеет специальный смысл внутри [...], и его понадобилось бы экранировать. Кроме того, когда мы оформим это в JavaScript-синтаксис /.../ -- понадобится заэкранировать слэш /. Нам нужно число, затем оператор, затем число, и необязательные пробелы между ними. Полное регулярное выражение будет таким: -?\d+(\.\d+)?\s*[-+*/]\s*-?\d+(\.\d+)?. Чтобы получить результат в виде массива, добавим скобки вокруг тех данных, которые нам интересны, то есть -- вокруг чисел и оператора: (-?\d+(\.\d+)?)\s*([-+*/])\s*(-?\d+(\.\d+)?). Посмотрим в действии: ```js //+ run var re = /(-?\d+(\.\d+)?)\s*([-+*\/])\s*(-?\d+(\.\d+)?)/; alert( "1.2 + 12".match(re) ); ``` Итоговый массив будет включать в себя компоненты: Нам из этого массива нужны только числа и оператор. А, скажем, дробная часть сама по себе -- не нужна. Уберём её из запоминания, добавив в начало скобки ?:, то есть: (?:\.\d+)?. Итого, решение: ```js //+ run function parse(expr) { var re = /(-?\d+(?:\.\d+)?)\s*([-+*\/])\s*(-?\d+(?:\.\d+)?)/; var result = expr.match(re); if (!result) return; result.shift(); return result; } alert( parse("-1.23 * 3.45") ); // -1.23, *, 3.45 ```