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