如何在javascript中解析包含数字的数字/浮点数的字符串?

Ben*_*Ben 5 javascript regex

我正在尝试构建一个能够解析句子并返回数字的javascript函数。

这是我为以下测试用例设置的jsFiddle-

  1. '我有1磅'-> 1
  2. '我有£3.50可以花'-> 3.50
  3. '我有23.00磅'-> 23
  4. '£27.33'-> 27.33
  5. '$ 4345.85'-> 4345.85
  6. '3.00'-> 3
  7. '7.0'-> 7
  8. “应该有2.0。” -> 2
  9. “应该有15.20。” -> 15.20
  10. '3.15'-> 3.15
  11. “我只有5个,不是很好。” -> 5
  12. '34.23'-> 34.23
  13. 'sdfg545.14sdfg'-> 545.14
  14. 昨天我花了235468.13英镑。今天我想少花些钱。-> 235468.13
  15. “昨天我花了340磅。” -> 340
  16. ``我今天花了14.52英镑,明天花了17.30英镑-> 14.52
  17. '我有0棵树,明天£11.33'-> 0

16&17表示应该找到第一个数字。我知道有些测试用例可能很困难,但是我欢迎任何能够为我提供合理覆盖范围的东西。

这是我用于功能的格式

function parseSentenceForNumber(sentence){

    return number; //The number from the string
}
Run Code Online (Sandbox Code Playgroud)

我想自己可以自己解决60%到80%的问题,但是我希望在这里使用正则表达式可能是最好的解决方案,而我从来都不擅长于此。希望我有足够的测试用例,但可以随时添加我可能错过的任何内容。

非常感谢您的帮助。

**更新**

大量的工作答案,我需要花一些时间来详细研究它们。迈克·塞缪尔(Mike Samuel)提到了逗号和.5,导致我添加了另外两个测试用例

18.'我有1,000磅'-> 1000 19。'。5'-> 0.5

jsalonen提到添加无数字的测试用例

20,'此句子不包含数字'-> null

这是使用jsalonen解决方案的更新小提琴,如果没有我的规格更改,我会100%在那里,而我的更改是95%。谁能提供带逗号的数字18解决方案?

**更新**

我添加了一条语句,以去除jsalonen函数的逗号,并且我100%满意。

这是最终功能

function parseSentenceForNumber(sentence){
    var matches = sentence.replace(/,/g, '').match(/(\+|-)?((\d+(\.\d+)?)|(\.\d+))/);
    return matches && matches[0] || null;
}
Run Code Online (Sandbox Code Playgroud)

最后的小提琴

非常感谢您的帮助,我在此过程中提高了我的正则表达式知识。谢谢

jsa*_*nen 2

将所有负数和正数与任意位数匹配的答案:

function parseSentenceForNumber(sentence){
    var matches = sentence.match(/(\+|-)?((\d+(\.\d+)?)|(\.\d+))/);
    return matches && matches[0] || null;
}
Run Code Online (Sandbox Code Playgroud)

也考虑添加负面测试用例,例如测试字符串没有数字时会发生什么:

test("Test parseSentenceForNumber('This sentence contains no numbers')", function() {
  equal( parseSentenceForNumber('This sentence contains no numbers'), null );
});
Run Code Online (Sandbox Code Playgroud)

完整的小提琴: http: //jsfiddle.net/cvw8g/6/