计算字符串中所有数字之和
在开发中遇到一个问题,有一串字符串里面包含数字,比如:'你好吗17这里是cnode34.5你知道nodejs67.23吗'
。怎么提取这里面的所有数字出来并且求和?这里所说的数字之和是值:17+34.5+67.23
,不是每个单个数字之和!网上的方法只是提取说有的数字:
var openIndex = openingId.replace(/[^0-9]/ig,"");
而且他会把小数点也替换掉了!大家有没有其他办法啊?或者说是其他的思路?恳请各位大神帮帮忙啊。
12 回复
最笨的方法就是for把所有数字提出来
var lastnum = false;
var dotted = false;
var nums = [];
for(var i = 0; i < text.length(); i++)
{
if(text[i] >= '0' && text[i] <= '9') {
if(!lastnum) {
lastnum = true;
nums.push[text[i]];
} else {
nums[nums.length - 1] += text[i];
}
} else if(text[i] === '.') {
if(lastnum && !dotted) {
nums[nums.length - 1] += text[i];
dotted = true;
} else {
lastnum = false;
dotted = false;
}
} else {
lastnum = false;
dotted = false;
}
}
直接在编辑框里码的,不保证正确性-。 -
反正大致就是这个样子吧。最后把数组里的数字都加起来就好了。
[0-9.]+ 正则匹配出来啊
process.stdin.resume();
process.stdin.setEncoding('utf8');
var s = '你好吗17这里是cnode34.5你知道nodejs67.23吗';
var reg = /[+-]?\d+\.?\d*/g;
var sum = 0.0;
var expr;
numbers = s.match(reg);
if (numbers != null){
for (v in numbers) {
if (v == 0)
expr = numbers[v];
else
expr += '+' + numbers[v];
sum += parseFloat(numbers[v]);
}
}
console.log(expr + '=' + sum);
低调的奢华,
我只是想到了用String对象的match,因为他可以匹配后返回数组,但是一直写不出来正则!谢谢您!
看了下您的资料,低调有内涵!
不错,不错,漫画爱好者
这样算不偷懒?
function fun(src){
var n = 0;
src.replace(/[\d\.]+/g,function(s){var _n = parseFloat(s); if (_n == _n){n+=_n}})
return n;
}
正则有BUG还出来打广告
var s = "sdsdsf21dssds4.52ssccx";
var result = s.match(/\d+\.?\d*/gi)
.reduce(function(p,c){return parseFloat(p)+parseFloat(c)});
// result is 25.52
签名 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3
这个不行,有BUG! var s = “sds1.2sdf,1…sdf…1,…1…1.1,.1ssccx”; 结果不一致
真是惭愧啊,我也就是想到match()
却没有想到使用数组的reduce()
,看似多使用一个方法,功力却相差很多,真是惭愧!
reduce开销有点大,但是这么写比较jsstyle