簡體   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