Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 两个捕获组之和_Javascript_Regex - Fatal编程技术网

Javascript 两个捕获组之和

Javascript 两个捕获组之和,javascript,regex,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 = ne

我需要从一个字符串中得到两个值并求和

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:如果您尝试在控制台中运行,最后一个数字将有一个逗号,但在my node.js环境中是一个点。)

我想知道我是否可以用两个组创建一个正则表达式,并将它们相加

总数应为
1.691.104,49

我试图这样总结:

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

output: NaN
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, '.');

谢谢。

您必须执行以下操作:

Number(match[1].replace(/[\.,]/g, ''))
要去掉
s和
s,请在对数字求和之前

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

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

output: NaN
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
。我和斯特里比雪夫有同样的问题,关于你是如何做总结的

这是上面例子的提琴:

这是更新后的小提琴-稍微整理一下:


此外,添加小数是基于对这个问题的回答:

您必须执行以下操作:

Number(match[1].replace(/[\.,]/g, ''))
要去掉
s和
s,请在对数字求和之前

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

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

output: NaN
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
。我和斯特里比雪夫有同样的问题,关于你是如何做总结的

这是上面例子的提琴:

这是更新后的小提琴-稍微整理一下:


此外,添加小数是基于这个问题的答案:

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

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

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

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

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

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

您确定总和结果不是
1.680.586,68
?您确定总和结果不是
1.680.586,68
?可能的输入错误:
s/is return/returns/
。可能的输入错误:
s/is return/returns/
。成功!谢谢你,尘鼠!太好了,非常感谢。现在我只需要用一个捕获组替换两个正则表达式,用两个捕获组替换一个正则表达式。你知道怎么做吗?你还在乎小数和逗号吗?你想在每组中具体捕获什么?同样的结果,我想传递单词SOC 01,得到单词或数字后的第三个和第七个值。相同的结果,但只有一个正则表达式。可能吗?成功了!谢谢你,尘鼠!太好了,非常感谢。现在我只需要用一个捕获组替换两个正则表达式,用两个捕获组替换一个正则表达式。你知道怎么做吗?你还在乎小数和逗号吗?你想在每组中具体捕获什么?同样的结果,我想传递单词SOC 01,得到单词或数字后的第三个和第七个值。相同的结果,但只有一个正则表达式。可能的