查找字符串中的数字并将它们添加到一起

时间:2014-08-18 12:01:01

标签: jquery

我想知道jQuery是否可以在字符串中添加数字......

字符串只能添加到自身,如下面的示例所示。如果出现一个或多个字符串,则应将其组合。

所有可能的字符串:click here

可能的字符串示例:

+0.53 attack damage
+0.53 attack damage
= 1.06 attack damage

+8.75 mana
+8.75 mana
= 17.5 mana

每个都可以组合到 9次

3 个答案:

答案 0 :(得分:1)

遍历字符串的字符(通过制作长度为1的子字符串);一旦检测到数字或小数点,将起始位置保存在变量中。然后,一旦检测到不是数字或小数点或小数点后第二位(计算小数点数),数字就会结束;保存结束位置和voilà,你有数字的开始和结束位置,可以通过制作一个子串来获得它。

答案 1 :(得分:0)

var strs = [
  "Hello 1 World",
  "Hello 2 World"
];

var n = 0;
strs.forEach(function(str) {
  str.match(/[\d|\.|\-]+/g).forEach(function(num) {
    n+= window.parseFloat(num);
  });
});

编辑:哦,那个"可能的字符串列表" (用百分比值等)改变了比赛。好吧,从这开始并改进实施:|

答案 2 :(得分:0)

这个正则表达式:

/((-|\+)?([0-9]+|)(\.?[0-9]+))/g

您可以像这样使用Array.prototype.reduce来累计数字

var str = 'Hello +0.50 World Hello 1 World Hello -10 World',
    re = /((-|\+)?([0-9]+|)(\.?[0-9]+))/g,
    sum;

sum = (str.match(re) || []).reduce(function (prev, current) {
   if (Object.prototype.toString.call(prev) !== '[object Number]') {
       prev = parseFloat(prev, 10);
   }
   return prev + parseFloat(current, 10);
}, 0);

// sum should be equal to -8.5 here

请注意,str.match(re)可能会返回null,因此我们只需确保在数组上调用reduce