来自javascript的字符串中的数字

时间:2011-03-12 09:30:22

标签: javascript regex string

candy 5.5, icecream 3.4, something valuable 1,185.5*2

我特意使用.,作为分隔符。 我需要从这个字符串中获取

  

var sum = 5.5 + 3.4 + 1185.5 * 2

4 个答案:

答案 0 :(得分:1)

我很确定这可以使用正则表达式实现

使用类似

的模式
(?:([0-9.,*]+).*?)?

找到所有匹配项(在java脚本中我认为它是g修饰符)然后只是一些标准处理来删除所有逗号然后像往常一样添加字段

如果您在W3schools之前没有使用正则表达式通常是一个好的开始 http://www.w3schools.com/jsref/jsref_obj_regexp.asp

抱歉,我不能提供更具体的内容,但我还没有使用javascript

答案 1 :(得分:1)

设计不佳,因为您将逗号作为分隔符,也可以作为数字的一部分。

我的建议是两次通过字符串。首先查找两位数字后跟3位数字,然后删除逗号。定期表达可能在这里很有用。在swecond pas上用逗号分隔字符串,然后在每个部分上从右边扫描到第一个空格字符以中断数字部分。

通过添加加号来构建字符串,然后使用eval进行计算。这将照顾任何额外的乘法运算。

答案 2 :(得分:1)

您可以从字符串中获取表达式字符串,如[*]:

 var str = 'candy 5.5, icecream 3.4, something valuable 1,185.5*2'
   , sum = str.replace(/[a-z]+|,\s+/gi,'').trim().split(/\s+/).join(' + ');

eval它。不过,你可能想要考虑其他想法来处理这个问题(在初始字符串中使用更好的分隔符,避免使用eval(considered evil)等。)

[*] trim正在

String.prototype.trim = function(){
 return this.replace(/^\s+|\s+$/,'');
}

答案 3 :(得分:1)

我的选择是:

var buildSumString = function(testString) {
    rx=/(\d[\d\.\*]*)/g
    return 'var sum = ' + testString.match(rx).join(' + ');
};

var testString = "candy 5.5, icecream 3.4, something valuable 1,185.5*2";
var rebuiltString = buildSumString(testString);

这里唯一的假设是你的数字字符串中没有空格,尽管可以很容易地添加。