假设我在整个页面中都有一个数字:
Lorem ipsum dolor sit amet, {5} consectetur adipisicing elit {2},
sed do eiusmod {9} tempor incididunt ut labore et dolore magna aliqua.
幸运的是,它们用大括号括起来{}。使用javascript - jQuery不可用 - 如何添加这些数字以返回总数:在这种情况下为16。
答案 0 :(得分:3)
你可以在这里使用eval ......
var str = 'Lorem , {5} elit {2}, sed {9} tempor';
var sum = eval(str.match(/\d+(?=\})/g).join('+'));
/* returned value: (Number)
16
*/
答案 1 :(得分:2)
试试这个:
var str = 'Lorem ipsum dolor sit amet, {5} consectetur adipisicing elit {2}, sed do eiusmod {9} tempor incididunt ut labore et dolore magna aliqua.';
var result = str.match(/\{[^}]+\}/g).join('').match(/\d+/g).reduce(function(a,b) {
return +a + +b;
});
console.log(result); //=>16
修改:如果您想让它更清晰一点,请查看gmatch
帮助:http://jsbin.com/asufek/1/edit
答案 2 :(得分:1)
这是一个解决方案,演示使用Node.textContent从页面获取文本,将浮点数(包括整数)与“{”和“}”中包围的指数(如果存在)匹配但不是消耗尾随“}”,使用regex,然后执行它们的总和。在总和期间,我们使用String slice删除了前导“{”。
HTML
<div>Lorem ipsum<span>dolor sit amet, </span>{5} consectetur adipisicing<span>elit {2}, sed do eiusmod</span><span>{9} tempor incididunt ut labore </span>et dolore magna aliqua.</div>
的Javascript
var array = document.body.textContent.match(/{[-+]?\d*\.?\d+([eE][-+]?\d+)?(?=\})/g);
var length = array.length;
var i = 0;
var sum = 0;
while (i < length) {
sum += parseFloat(array[i].slice(1));
i += 1;
}
console.log(sum);
上
为了感兴趣,这里是当前(3)答案的jsperf。