【发布时间】:2015-05-28 12:09:20
【问题描述】:
我想要一个正则表达式,它将匹配一对括号内的有效数学表达式,该括号不包含任何自己的括号。
- 输入已预先验证,并且仅包含有效的数学表达式。
例如,给定以下输入,正则表达式应匹配 3*4.5:
(1 + 2 + 3 + 5 * 9 + 2 + 3 + (3*4.5))
我编写了以下正则表达式,它匹配括号内最多一个数学运算的简单情况:
(?:-?\()(-?\d*\.*\d*\s*[-\+\*/]?\s*-?\d*\.*\d*)(?:\))
成功匹配3*4.5。
但是,由于数学运算的数量未知,我需要更通用的解决方案。天真地,我认为这会起作用(在捕获组之后添加了+):
(?:-?\()((-?\d*\.*\d*\s*[-\+\*/]?\s*-?\d*\.*\d*)+)(?:\))
但是,结果是超时。见here。
所需的正则表达式应该为下面的输入返回 3 * 4.5 + 7 /3 * -2
(1 + 2 + 3 + 5 * 9 + 2 + 3 + (3 * 4.5 + 7 /3 * -2))
【问题讨论】:
标签: javascript regex