JavaScript:如何从字符串中提取多个数字

4
输入:

输入:

"NEW YORK (路透社) 美国股指期货周三指向华尔街略有反弹,标普500指数期货上涨0.34%,道琼斯指数期货上涨0.12%,纳斯达克100指数期货在GMT 0921时上涨0.51%。"

输出应为包括浮点数在内的所有数字数组。

此线程有些相似,但它只提取一个数字。

输出: [0.34, 0.12, 0.51, 0921]

1
正则表达式是正确的选择。 - Onkelborg
2个回答

9

这应该就可以了:

var text = "NEW YORK (Reuters) U.S. stock index futures pointed to a slight rebound on Wall Street on Wednesday, with futures for the S&P 500 up 0.34 percent, Dow Jones futures up 0.12 percent and Nasdaq 100 futures up 0.51 percent at 0921 GMT.";
console.log(text.match(/(\d[\d\.]*)/g));

您可以使用以下代码过滤掉无效号码,例如55.55.55
var numbers = [];
text.replace(/(\d[\d\.]*)/g, function( x ) { var n = Number(x); if (x == n) { numbers.push(x); }  })

6
这个正则表达式应该可以工作:
/[-+]?[0-9]*\.?[0-9]+/g

一个测试:

"NEW YORK (Reuters) U.S. stock index futures pointed to a slight rebound on Wall Street on Wednesday, with futures for the S&P 500 up 0.34 percent, Dow Jones futures up 0.12 percent and Nasdaq 100 futures up 0.51 percent at 0921 GMT.".match(/[-+]?[0-9]*\.?[0-9]+/g)

返回此数组:

["500", "0.34", "0.12", "100", "0.51", "0921"]

你的解决方案将无法处理以下内容: "123.45.67 .56" 例如。 - KARASZI István
4
根据你所说的“失败”的定义不同,它会返回["123.45", ".67", ".56"]。"123.45.67"不是浮点数。如果输入是1 000 000或1,000,000,它可能也会失败 - 这取决于你的需求。 - Matt
这就是我用的那一个。谢谢。 - DJ Burb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接