Мне нужна помощь с этим регулярным выражением:
let j = numberArray.join("").match(/^([\d]*\.{1,}[\d]+|[\d]+)|([-+*/](?=\.|[\d]))|\.[\d]+|[\d]+/g);
Вот критерии, которым мне нужно соответствовать:
.123 или 1.123, но не ...33 или 1.2.3.3.+, за которым следует *.Пример ввода и здесь:
ввод: ..123+*/.4.3.5-+..3+123
даст результат: .123/.435+.3+123
Я действительно думаю, что у меня есть второй критерий (относительно операторов), но я действительно боролся с десятичными точками. Я новичок в регулярных выражениях и изо всех сил стараюсь взломать это, но через некоторое время мне это начинает приходить в голову. Любая помощь высоко ценится!
Чтобы упростить мой предыдущий комментарий: если определенные входы «не разрешены», такие как ...3 или +*, зачем пытаться разобраться в этих входах, а не отклонять их? много легче отклонить эти бессмысленные входные данные, а затем проанализировать любые приемлемые входные данные, чем пытаться разобраться в этой бессмыслице.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Логика, вероятно, была бы проще, если бы вы выполнили эти операции по отдельности - сначала найдите числа с несколькими десятичными знаками и исправьте их, чтобы они содержали только первый десятичный знак, тогда находит повторяющиеся операторы и заменяет их последним оператором:
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.info(clean('..123+*/.4.3.5-+..3+123'));ох, чувак, большое тебе спасибо! Я пытался сделать все за один присест, но разобрать это, очевидно, намного проще.
Не считая того, что
..123, вероятно, следует рассматривать как ошибку, а не анализировать как0.123(то же самое с.4.3.5), у вас есть другие проблемы. Это приведет к некоторым странным двусмысленностям. Например, совсем не ясно, почему вы выбрали/вместо+или*в приведенном вами примере (в последовательности+*/) или почему вы полностью игнорируете знак-. В обычной математике-+3будет-3, а не+3.