繁体   English   中英

JavaScript正则表达式:为什么将数字与尾随十进制相匹配?

[英]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

请注意, DecimalDigitsExponentPart两者是可选的。

这是完全有效的JavaScript:

 var a = 42.; // -------^ console.log(a); // 42 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM