Как реализовать функцию, высчитывающую проценты js через разбиение массива по множественным разделителям

function calc_percent(){
    let arr = input.value;
    let first_num = arr.split(/_(.+|-|*|/)/)[0];// цифры, введенные до одного из разделителей (+, -, *, /)
    let second_num = arr.split(/_(.+)/)[1];//цифры, введенные после любого активного разделителя(например -)
    let percent = first_num/100*second_num;// процент
    input.value = percent;// вывод данных по нажатию на кнопку %  <button type = "button" class = "second_row" onclick = "calc_percent()">%</button>
}

Как сделать, чтоб первое число формировалось до любого из указанных разделителей и второе число после этого разделителя? И как найти процент, например, 100 - 10% или 100 + 10%? Выше есть код, но там проблемы с регулярными выражениями... В общем, это попытка создать калькулятор... в один инпут должно вводится число. например 100, потом от него должны отниматься желаемые проценты, например 10 и по нажатию на кнопку % должно произойти вычисление этих процентов и вывод их в тот же инпут, как результат. то есть, мы принимаем в этом инпуте массив с числами, разделенными некоторыми знаками. например 100-10%, так вот, надо как-то разделить этот массив на два числа и совершить с ними операцию по вычислениею процентов. не судите строго, я только начинаю изучать js...


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

Автор решения: vsemozhebuty

Можно использовать регулярное выражение, в котором создать три группы в скобках: для числа, для знака и для количества процентов. Затем использовать условное ветвление в зависимости от знака. (Я не добавлял проверки на правильность входных данных).

function calc_percent(){
  const str = input.value;
  let result;
    
  let [, num, operator, percent] =
    str.match(/(\d+)\s*([-+*/])\s*(\d+)%/) ?? [];
    
  num = Number(num);
  percent = num / 100 * percent;
    
  if (operator === '-') result = num - percent;
  else if (operator === '+') result = num + percent;
  else if (operator === '*') result = num * percent;
  else if (operator === '/') result = num / percent;
  else result = 'Неправильный формат.';
    
  input.value = result;
}
<input id='input'>

<button type = "button" class = "second_row" onclick = "calc_percent()">%</button>

→ Ссылка