JavaScript中的复杂正则表达式

时间:2011-11-30 04:46:06

标签: javascript regex

我有这个任务: 将字符串中的所有数字相加并执行乘法

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

怎么做?

正则表达式对我来说总是很痛苦:(

3 个答案:

答案 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

期待在这里结束与找到的号码匹配。