const regex = new RegExp('^(?<type>(?:ci-|cloud-)?[^-]+)[_-](?<version>\\d+\\.\\d+\\.\\d+)(?<alpha>[-+]alpha)?(?:-(?<date>\\d{8}))?[-+](?:(?<build>\\d+).(?<builddate>\\d{8}))?(?:[.-]?(?<sha>[A-Fa-f0-9]+(?:[.-]\\d+)?))?(?:\\.(?<arch>.+))?\\.(?<fmt>.{3})', 'gm')
const str = `cloud-csm-6.4.13-20210927-89fa91ca.lnx.x86_64.zip
cams-7.2.4+4.20211216.zip
cams-7.2.4-alpha+4.20211216.zip
cca-6.4.23+753.20211216.193a0386-1.noarch.rpm
cca-6.4.23+alpha+753.20211216.193a0386-1.noarch.rpm
cca-6.4.23-alpha+753.20211216.193a0386.zip
cca_6.4.23+753.20211216.193a0386-1_all.deb
ci-j2ee-6.4.23+790.20211216.193a0386.zip
ci-j2ee-6.4.23-alpha+790.20211216.193a0386.zip
ci-server-6.4.23+790.20211216.193a0386.zip
ci-server-6.4.23-alpha+790.20211216.193a0386.zip
cloud-ci-7.1.15+90.20210119.46eef7d3-1.noarch.rpm
cloud-ci-7.2.4+247.20211216.eba3915b.noarch.zip
cloud-ci-7.2.4+alpha+247.20211216.eba3915b-1.noarch.RPM
cloud-ci-7.2.4-alpha+247.20211216.eba3915b.noarch.zip
cloud-cm-7.2.4+246.20211216.eba3915b-1.noarch.rpm
cloud-cm-7.2.4+246.20211216.eba3915b.noarch.zip
cloud-cm-7.2.4+alpha+246.20211216.eba3915b-1.noarch.rpm
cloud-cm-7.2.4-alpha+246.20211216.eba3915b.noarch.zip
cloud-csd-7.2.4+241.20211216.eba3915b-1.x86_64.rpm
cloud-csd-7.2.4+241.20211216.eba3915b.1-sym-x86_64.rpm
cloud-csd-7.2.4+241.20211216.eba3915b.lnx.x86_64.zip
cloud-csd-7.2.4+241.20211216.eba3915b.sym.lnx.x86_64.zip
cloud-csd-7.2.4+alpha+241.20211216.eba3915b-1.x86_64.rpm
cloud-csd-7.2.4+alpha+241.20211216.eba3915b.1-sym-x86_64.rpm
cloud-csd-7.2.4-alpha+241.20211216.eba3915b.lnx.x86_64.zip
cloud-csd-7.2.4-alpha+241.20211216.eba3915b.sym.lnx.x86_64.zip
cloud-csm-6.4.13-20210927-89fa91ca.lnx.x86_64.zip
cloud-csm-6.4.13-20210927-89fa91ca.win.x86.zip
cloud-cst-7.2.4+241.20211216.eba3915b-1.x86_64.rpm
cloud-cst-7.2.4+241.20211216.eba3915b.1-sym-x86_64.rpm
cloud-cst-7.2.4+241.20211216.eba3915b.lnx.x86_64.zip
cloud-cst-7.2.4+241.20211216.eba3915b.sym.lnx.x86_64.zip
cloud-cst-7.2.4+alpha+241.20211216.eba3915b-1.x86_64.rpm
cloud-cst-7.2.4+alpha+241.20211216.eba3915b.1-sym-x86_64.rpm
cloud-cst-7.2.4-alpha+241.20211216.eba3915b.lnx.x86_64.zip
cloud-cst-7.2.4-alpha+241.20211216.eba3915b.sym.lnx.x86_64.zip
cloud-parts-7.2.4-20211216.zip
cloud-parts-7.2.4-alpha-20211216.zip
cloud-xds-6.4.6-20211101-4b76a168.lnx.x86.zip
cloud-xds-6.4.6-20211101-4b76a168.win.x86.zip
cm-6.4.23+798.20211216.193a0386-1.noarch.rpm
cm-6.4.23+alpha+798.20211216.193a0386-1.noarch.rpm
cm-6.4.23-alpha+798.20211216.193a0386.zip
cm_6.4.23+798.20211216.193a0386-1_all.deb
cm_6.4.23+alpha+798.20211216.193a0386-1_all.deb
csm-6.4.13-20210927-89fa91ca.lnx.x86_64.tar
csm-6.4.13-20210927-89fa91ca.win.x86.zip
dbconfig-7.2.4+231.20211216.eba3915b.zip
dbconfig-7.2.4-alpha+231.20211216.eba3915b.zip
xds-6.4.6-20211101-4b76a168.lnx.x86.tar
xds-6.4.6-20211101-4b76a168.win.x86.zip`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions