簡體   English   中英

semver中的Node.js正則表達式非捕獲組

[英]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 -它只會返回truefalse
對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM