[英]Node.js regular expression non-capture group in semver
我正在嘗試了解語義版本如何在nodejs(和npm)中工作。 托管nodejs使用的正則表達式的git repo在這里https://github.com/sindresorhus/semver-regex ,但是我只復制了下面兩行代碼。
'use strict';
module.exports = () => /\bv?(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\da-z-]+(?:\.[\da-z-]+)*)?(?:\+[\da-z-]+(?:\.[\da-z-]+)*)?\b/ig;
據我所知,這對每個組都使用非捕獲組(?:...)
。 這是如何運作的? 盡管沒有捕獲任何內容,但匹配似乎返回了值。 我想念一個捕獲小組嗎? 這是nodejs中的非標准嗎?
顯然是為了test
-它只會返回true
或false
;
對於exec
第一個結果將是完整正則表達式入口的值。 因此,它將類似於:
// r = /\bv?(?:0|[1-9]\d*)\.(?:...
r.exec('1.0.1');// => Array [ "1.0.1" ];
沒有?:
結果,我們將所有組作為數組值,例如:
// r = /\bv?(0|[1-9]\d*)\.(...
r.exec('1.0.1');// => Array(8) [ "1.0.1", "1", "0", "1", undefined, undefined, undefined, undefined ]
不僅如此, exec
總是會返回正則表達式的結果,作為第一個元素(如果存在),即使您將使用如下正則表達式:
/(?:a)/.exec('a');// => Array [ "a" ]
我希望我能正確理解問題;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.