进一步的正则表达式总和

时间:2014-08-18 14:42:04

标签: javascript jquery regex

After getting this answer from aduch

With this regex:

    /((-|\+)?([0-9]+|)(\.?[0-9]+))/g

You can use Array.prototype.reduce like this to sum your numbers up


    var str = 'Hello +0.50 World Hello 1 World Hello -10 World',
        re = /((-|\+)?([0-9]+|)(\.?[0-9]+))/g,
        sum;

    sum = (str.match(re) || []).reduce(function (prev, current) {
       if (Object.prototype.toString.call(prev) !== '[object Number]') {
           prev = parseFloat(prev, 10);
       }
       return prev + parseFloat(current, 10);
    }, 0);

    // sum should be equal to -8.5 here

Note that `str.match(re)` may return `null`, so we just make sure we call `reduce` on an array.

我想知道是否有可能忽略括号中的内容以及当前的内容。

以下是将一起添加的字符串示例:

+0.08 attack damage per level (+1.35 at champion level 18)

它当前在字符串中添加了所有内容,是的 - 我确实要求,但它不会将0.08添加到自身,而1.35添加到自身,它会将它们合并在一起。

我或者要么将它们分开,因为一个在括号中,一个不是或者只是忽略括号内的内容。 ("级别之后的内容......"在所有情况下都应忽略括号内)

1 个答案:

答案 0 :(得分:0)

要保留第一个号码,请尝试:

^((-|\+)?([0-9]+|)(\.?[0-9]+))

或更简单

^((-|\+)?\d*\.?\d*)

如果您想要多个匹配项,请记住使用捕获组。 http://www.regular-expressions.info/brackets.html