繁体   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