我正在尝试构建一个能够解析句子并返回数字的javascript函数。
这是我为以下测试用例设置的jsFiddle-
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)
最后的小提琴
非常感谢您的帮助,我在此过程中提高了我的正则表达式知识。谢谢
将所有负数和正数与任意位数匹配的答案:
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/
| 归档时间: |
|
| 查看次数: |
4077 次 |
| 最近记录: |