JavaScript Regex для соответствия математического выражения - PullRequest
0 голосов
/ 10 декабря 2018

Мне нужна помощь с этим регулярным выражением:

let j = numberArray.join("").match(/^([\d]*\.{1,}[\d]+|[\d]+)|([-+*/](?=\.|[\d]))|\.[\d]+|[\d]+/g);

Это критерии, которые мне нужно соответствовать:

  1. число не может иметьнесколько десятичных знаков.Например, допускаются только такие числа, как .123 или 1.123, но не ...33 или 1.2.3.3.
  2. За оператором не может следовать один или несколько дополнительных операторов.Таким образом, пользователь не может последовательно ввести +, за которым следует *.

Пример ввода и вывода здесь:

input: ..123+*/.4.3.5-+..3+123

даст результат: .123/.435+.3+123

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

1 Ответ

0 голосов
/ 10 декабря 2018

Логика, вероятно, была бы проще, если бы вы выполняли эти операции отдельно - сначала найдите числа с несколькими десятичными знаками и исправьте их так, чтобы они содержали только первое десятичное число, , а затем findповторяющиеся операторы и замените их конечным оператором:

const clean = str => str
  // Match zero or more digits, followed by a decimal,
  // followed by more digit and decimal characters
  // For everything past the first decimal, replace decimals with the empty string
  .replace(
    /(\d*\.)([\d.]+)/g,
    (_, g1, g2) => g1 + g2.replace(/\./g, '')
  )
  // Match 2 or more operators, capture the last operator in a group
  // Replace with the last operator captured
  .replace(
    /([-+/*]){2,}/g,
    '$1'
  );
  
console.log(clean('..123+*/.4.3.5-+..3+123'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...