假设我有一个遍布整个页面的数字:
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。
假设我有一个遍布整个页面的数字:
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。
You can use eval here...
var str = 'Lorem , {5} elit {2}, sed {9} tempor';
var sum = eval(str.match(/\d+(?=\})/g).join('+'));
/* returned value: (Number)
16
*/
尝试这个:
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
这是一个演示使用Node.textContent从页面获取文本的解决方案,将浮点数(包括整数)与“{”和“}”包围的指数(如果存在)匹配,但不消耗尾随的“} ",使用正则表达式,然后执行它们的总和。在求和期间,我们使用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。