我有这个任务: 将字符串中的所有数字相加并执行乘法
input: "3 chairs, 2 tables, 2*3 forks" result: 11
我已经有正则表达式来执行此操作:
eval(str.match(/(\d[\d\.\*]*)/g).join(' + '))
但我想添加选项来忽略括号“()”
中的数字input: "2 chairs, 3 tables (1 broke)" result: 5
怎么做?
正则表达式对我来说总是很痛苦:(
答案 0 :(得分:5)
一种简单的方法是进行第一次传递并删除所有带括号的表达式。
str = str.replace(/\([^\)]*\)/g, "");
// now run your original algorithm to sum/multiply...
// ...
这不是超级有效但它可以完成这项任务。
我应该注意,这不会处理嵌套的括号,但似乎不需要这样。
答案 1 :(得分:0)
您可以使用indexOf()
和lastIndexOf()
来检测最外侧的括号,以便您可以摆脱您想要的内容。这可以使用无限期括号
答案 2 :(得分:0)
(?=(\d+[\d.*]*)(?![^(]*?\)))\1
(?=(
开始使用向前搜索组
(\d+[\d.*]*)
是您的号码的抓取组
(?![^(]*?\))
是一个负向正向查找,确保在数字
之后没有一个左括号)\1
期待在这里结束与找到的号码匹配。