javascript - Node.js semver 中的正则表达式非捕获组

标签 javascript node.js regex semantic-versioning

我试图了解语义版本在nodejs(和npm)中的工作原理。托管 Nodejs 使用的正则表达式的 git 存储库位于 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" ]

我希望我正确理解了问题;

关于javascript - Node.js semver 中的正则表达式非捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50920295/

相关文章:

node.js - 如何配置 webpack 仅构建运行 Angular 5 应用程序所需的资源?

java - java split中的简单正则表达式

c# - 仅从数字中删除双引号

javascript - 如何使用正则表达式从字符串中去除 [a-z]/[a-z]/?

javascript - 为什么在 console.log 之后没有调用 Javascript

node.js - iisnode 在 Windows 8 上找不到我的 32 位 Node.js 安装

Javascript ?运营商 : how to pass multiple parameters

javascript - 如何使用react将多个参数作为url中的对象传递

javascript提升: what would be hoisted first — variable or function?

Javascript函数作为变量?