gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:43 25 4
gpt4 key购买 nike

我试图了解语义版本在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com