我试图理解语义版本在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中是非标准的吗?
答案 0 :(得分:-1)
显然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" ]
我希望,我理解正确的问题;