我希望能够从JavaScript中的字符串中提取所有数字(包括浮点数)。在JavaScript中提取字符串中的所有数字
"-5. -2 3.1415 test 2.4".match(...)
回报
["-2", "3.1415", "2.4"]
到目前为止,我有/[-+]?(\d*\.?\d+)/g
,但这似乎与其他数字一起返回5
。我想避免这种情况,因为在字符串中,“单词”是5.而不是5或5.0。任何提示?
我希望能够从JavaScript中的字符串中提取所有数字(包括浮点数)。在JavaScript中提取字符串中的所有数字
"-5. -2 3.1415 test 2.4".match(...)
回报
["-2", "3.1415", "2.4"]
到目前为止,我有/[-+]?(\d*\.?\d+)/g
,但这似乎与其他数字一起返回5
。我想避免这种情况,因为在字符串中,“单词”是5.而不是5或5.0。任何提示?
如果你想不包括点,前瞻将使意义:
/[-+]?\d*(\.(?=\d))?\d+/g
另一种选择是将第二\d+
括号内:
/[-+]?\d+(\.\d+)?/g
这Rx取得数字以字符串表示,带或不带符号,小数或指数格式 -
rx =/[+ - ]?((。\ d +)|(\ d +(。\ d +)?)([eE] [ + - ] \ d +)?)/克
String.prototype.getNums= function(){
var rx=/[+-]?((\.\d+)|(\d+(\.\d+)?)([eE][+-]?\d+)?)/g,
mapN= this.match(rx) || [];
return mapN.map(Number);
};
变种S = '当它是外-40度,它不\' 吨重要的是 '+
' 7个玫瑰花费$ 14.35和7级潜艇花费$ 1.435e +9“。
s.getNums();
/*返回值:(阵列) -40,7,14.35,7,14.35亿 */
原因这个问题很难回答,是你必须能够检查字符在数字之前或在+或 - 之前是空格或行首。
由于JavaScript没有能力为这个方案提供解决方案,因此对字符串使用.match()
方法变得几乎不可能。鉴于此,这里是我的解决方案。
var extractNumbers = (function () {
numRegexs = [
/(|^)([+-]?[0-9]+)(|$)/g,
/(|^)([+-]?[0-9]+\.[0-9]+)(|$)/g,
/(|^)([+-]?[0-9]+\.[0-9]+([eE][+-])?[0-9]+)(|$)/g
];
return function(str) {
var results = [], temp;
for(var i = 0, len = numRegexs.length; i < len; i++) {
while(temp = numRegexs[i].exec(str)) {
results.push(temp[2]);
}
}
return results;
}
}());
numRegexs数组中的正则表达式对应于整数,浮点数和指数数。
演示here
鉴于您的例子字符串的项目之间的空间,我宁愿做:
var tokens = "-5. -2 3.1415 test 2.4".split(" ");
var numbers = [];
for(var i = 0 ; i < tokens.length ; i++)
if(isNumber(tokens[i]))
numbers.push(tokens[i]*1);
//numbers array should have all numbers
//Borrowed this function from here:
//http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric
function isNumber(n) {
return !isNaN(parseFloat(n*1)) && isFinite(n*1) && !endsWith(n,".");
}
endsWith = function(s , suffix) {
return s.indexOf(suffix, s.length - suffix.length) !== -1;
};
什么之类的东西'.5'?小数点的两边是否必须填写? –
-1因为你的问题陈述和数据不同意。请保持一致和准确。此外,我“相当肯定”这已经做了很多次.. – 2012-11-30 00:01:50
@pst:他的问题是,他不想'5'。被认定为有效的号码。你的理解是不符合问题陈述。 – slebetman