candy 5.5, icecream 3.4, something valuable 1,185.5*2
我特意使用.
和,
作为分隔符。
我需要从这个字符串中获取
var sum = 5.5 + 3.4 + 1185.5 * 2
答案 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);
这里唯一的假设是你的数字字符串中没有空格,尽管可以很容易地添加。