Регулярное выражение для поиска числа перед знаком «%»: /(\d+)%/
.
Однако математические выражения не являются регулярным языком, поэтому регулярное выражение, вероятно, не является правильным инструментом. Вместо этого вы должны указать вашему парсеру интерпретировать "%" как "возьмите все, что будет до этого, и разделите его на 100". «Все, что предшествует этому» может быть любым математическим выражением, и вы не столкнетесь с проблемами приоритета операторов, соответственно. Вы можете разобраться в них в синтаксическом анализаторе дерева.
Смешивание подстановки текста с реальными языковыми функциями часто нарушает принцип наименьшего удивления. Когда пользователь видит, что «%» делит все, что раньше, на 100, он может попытаться использовать выражения типа (23+42)%
, но это приведет к синтаксической ошибке. Кроме того, вам нужно более сложное регулярное выражение, если у вас есть что-то вроде 1.34e-14%
, но эти вещи просто рассортируются при использовании синтаксического анализатора дерева.