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,得到单词或数字后的第三个和第七个值。相同的结果,但只有一个正则表达式。可能的