1

假设我有一个遍布整个页面的数字:

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。

4

3 回答 3

3

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
*/
于 2013-05-03T01:18:16.067 回答
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

于 2013-05-03T01:08:01.753 回答
1

这是一个演示使用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);

jsfiddle 上

出于兴趣,这里是当前 (3) 答案的jsperf

于 2013-05-03T01:50:38.617 回答