>>653 javascript
const vComp = (a, b) => {
const [semA, semB] = [a, b].map(v => {
const {major, minor = 0, patch = 0} = /(?<major>\d+)(\.(?<minor>\d+)(\.(?<patch>\d+))?)?/.exec(v).groups;
return {major, minor, patch};
});
const majorComp = semA.major - semB.major;
if (majorComp) return Math.sign(majorComp);
const minorComp = semA.minor - semB.minor;
if (minorComp) return Math.sign(minorComp);
const patchComp = semA.patch - semB.patch;
return Math.sign(patchComp);
};
console.log(vComp('0.1.2', '0.0'));
console.log(vComp('1.2.3', '1.3'));
console.log(vComp('0.0.0', '0.0'));
結果:
1
-1
0

(おまけ)ソート:
console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp));
結果:
["0.0", "0.0.0", "0.0", "0.1.2", "1.2.3", "1.3"]