Группа без регулярного выражения Node.js в semver
Я пытаюсь понять, как семантическая версия работает в nodejs (и npm). Репозиторий git, в котором размещено регулярное выражение, используемое nodejs, находится здесь 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?
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" ]
Надеюсь, я правильно понял вопрос;