从JavaScript中的字符串中提取所有数字

时间:2012-11-30 00:00:34

标签: javascript regex

我希望能够从JavaScript中的字符串中提取所有数字(包括浮点数)。

"-5. -2 3.1415 test 2.4".match(...) 

返回

["-2", "3.1415", "2.4"]

到目前为止,我有/[-+]?(\d*\.?\d+)/g,但这似乎与其他数字一起返回5。我想避免这种情况,因为在字符串中“单词”是5.而不是5或5.0。任何提示?

4 个答案:

答案 0 :(得分:2)

如果你不想加点,那么前瞻就有意义了:

/[-+]?\d*(\.(?=\d))?\d+/g

另一种选择是在括号内移动第二个\d+

/[-+]?\d+(\.\d+)?/g

答案 1 :(得分:1)

此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);
};

var s ='当它在-40度之外时,'+

并不重要 '7玫瑰花费14.35美元,7艘潜水艇花费1.435e + 9。';

<强> s.getNums();

/ *返回值:(数组) -40,7,14.35,7,1145000000 * /

答案 2 :(得分:1)

这个问题很难回答的原因是你需要能够检查数字之前或+或 - 之前的字符是空格还是行的开头。

由于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

答案 3 :(得分:0)

鉴于您的示例字符串在项目之间有空格,我宁愿这样做:

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;
};