gpt4 book ai didi

JavaScript 正则表达式 : why match number with trailing decimal?

转载 作者:行者123 更新时间:2023-11-29 17:52:48 25 4
gpt4 key购买 nike

我一直在读JavaScript: The Good Parts经过道格拉斯克罗克福德。在正则表达式部分,有以下正则表达式来解析数字:

var parse_number = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;

这个正则表达式一开始就非常简单,Crockford 对其进行了分解,因此几乎每个方面都非常清楚。但是,有一个方面没有完全解释,我无法弄清楚:

(?:\.\d*)?

我理解他的解释是:

The (?:... )? indicates an optional noncapturing group...The group will match a decimal point followed by zero or more digits.

让我感到困惑并且没有解释的部分是为什么零个或多个数字而不是一个或多个数字,即,为什么在这种情况下使用 \d* 而不是 \d+ ?我的直觉(已通过 .testing 得到证实)是,上述 parse_number 模式不仅会匹配 '1.0' 这样的字符串 - 这您可能想要匹配 - 但也会匹配像 '1.' 这样的带有尾随小数的字符串,我想不出一个用例。

我认为有一个很好的理由使用:

(?:\.\d*)?

代替:

(?:\.\d+)?

但这可能是什么原因呢?

最佳答案

匹配JavaScript NumericLiteral syntax production ,它允许尾部 . 后面没有数字。它在这里被调用:

DecimalLiteral ::

    DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt

请注意 DecimalDigitsExponentPart 都是可选的。

这是完全有效的 JavaScript:

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

关于JavaScript 正则表达式 : why match number with trailing decimal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41701466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com