在页面上汇总文本字符串

时间:2013-05-03 01:01:05

标签: javascript

假设我在整个页面中都有一个数字:

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。

3 个答案:

答案 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);

jsfiddle

为了感兴趣,这里是当前(3)答案的jsperf