[英]JavaScript regex: why match number with trailing decimal?
我一直在阅读Douglas Crockford的JavaScript:The Good Parts 。 在正则表达式部分中,有以下正则表达式可用于解析数字:
var parse_number = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
这个正则表达式一开始就非常简单,Crockford对其进行了分解,因此几乎每个方面都非常清楚。 但是,有一个方面没有完全解释,我无法弄清楚:
(?:\.\d*)?
我确实理解他的解释是:
(?:... )?
表示一个可选的非捕获组...该组将匹配一个小数点,后跟零个或多个数字。
让我感到困惑的部分(未解释)是为什么 零个或多个数字而不是一个或多个数字 ,即为什么在这种情况下使用\\d*
而不是\\d+
? 我的直觉(通过.test
确认)是,上述parse_number
模式不仅将匹配'1.0'
这样'1.0'
字符串(您可能希望匹配),还将匹配诸如'1.'
字符串'1.'
带有尾随的小数,我想不出用例。
我认为有一个很好的理由使用:
(?:\.\d*)?
代替:
(?:\.\d+)?
但是那可能是什么原因呢?
为了匹配JavaScript NumericLiteral语法生成 ,该语法生成允许尾随.
后面没有数字。 它在这里被呼出:
DecimalLiteral ::
DecimalIntegerLiteral
.
DecimalDigits opt ExponentPart opt
请注意, DecimalDigits和ExponentPart两者是可选的。
这是完全有效的JavaScript:
var a = 42.; // -------^ console.log(a); // 42
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.