求和两个捕获组

时间:2015-09-02 19:01:44

标签: javascript regex

我需要从字符串中获取两个值并将它们相加。

var text = 'SOC 01 672 1.653.806,08 18.512,98 1.667.621,57 2.647,38 07 23 12.965,11 0,00 12.965,11 0,00 13 5 10.517,81 0,00 10.517,81 0,00';
var reg  = new RegExp('SOC 01' +  '\\b.*?(?:\\d\\S*\\s+){3}(\\d\\S*)', 'i');
var reg2 = new RegExp('SOC 01' +  '\\b.*?(?:\\d\\S*\\s+){7}(\\d\\S*)', 'i');
var match = reg.exec(text);
var match2 = reg2.exec(text);

输出:

match[1] -> '1.667.621.57'
match2[1] -> '12.965.11'

(OBS:如果你尝试在控制台中运行,最后一个数字将有一个逗号,但在我的node.js环境中是一个点。)

我想知道我是否可以创建一个有两个组的正则表达式并将它们加在一起。

总数应为1.691.104,49

我试图这样总结:

(+match[1]) + (+match2[1])

output: NaN

感谢。

2 个答案:

答案 0 :(得分:0)

你将不得不做类似的事情:

Number(match[1].replace(/[\.,]/g, ''))

在对数字求和之前去除., s。

如果您需要将数字恢复为相同的格式,您可以执行以下操作:

var total = Number(match[1].replace(/[\.,]/g, '')) + Number(match2[1].replace(/[\.,]/g, ''));

var result = String(total);
result = result.replace(/(?=\d{2}$)/, ',');
result = result.replace(/\B(?=(\d{3})+(?!\d))/g, '.');

哪个产生1.680.586,68。我和stribizhev有关于你如何进行总结的问题。

以上是上述例子的小提琴:https://jsfiddle.net/qw700fq9/

这是更新的小提琴 - 稍微清理一下:https://jsfiddle.net/rdu15ds3/

此外,重新添加小数是基于此问题的答案:How to print a number with commas as thousands separators in JavaScript

答案 1 :(得分:0)

正则表达式返回一个字符串。在添加它们之前,您需要将它们转换为数字。

function toNumber(n){
    return parseFloat(n.replace(/./g,'').replace.(/,/g,'.'));
}

toNumber(+match[1]) + toNumber(+match2[1]);