您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Compare semver version strings to find which is greater, equal or lesser.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/372057/627717/omichelsencompare-versions.js
// ==UserScript== // @name omichelsen/compare-versions // @namespace https://github.com/omichelsen/compare-versions // @version undefind // @description Compare semver version strings to find which is greater, equal or lesser. // @author omichelsen // @license MIT // ==/UserScript== /* global define */ (function (root, factory) { /* istanbul ignore next */ if (typeof define === 'function' && define.amd) { define([], factory); } else if (typeof exports === 'object') { module.exports = factory(); } else { root.compareVersions = factory(); } }(this, function () { var semver = /^v?(?:\d+)(\.(?:[x*]|\d+)(\.(?:[x*]|\d+)(\.(?:[x*]|\d+))?(?:-[\da-z\-]+(?:\.[\da-z\-]+)*)?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i; function indexOrEnd(str, q) { return str.indexOf(q) === -1 ? str.length : str.indexOf(q); } function split(v) { var c = v.replace(/^v/, '').replace(/\+.*$/, ''); var patchIndex = indexOrEnd(c, '-'); var arr = c.substring(0, patchIndex).split('.'); arr.push(c.substring(patchIndex + 1)); return arr; } function tryParse(v) { return isNaN(Number(v)) ? v : Number(v); } function validate(version) { if (typeof version !== 'string') { throw new TypeError('Invalid argument expected string'); } if (!semver.test(version)) { throw new Error('Invalid argument not valid semver (\''+version+'\' received)'); } } return function compareVersions(v1, v2) { [v1, v2].forEach(validate); var s1 = split(v1); var s2 = split(v2); for (var i = 0; i < Math.max(s1.length - 1, s2.length - 1); i++) { var n1 = parseInt(s1[i] || 0, 10); var n2 = parseInt(s2[i] || 0, 10); if (n1 > n2) return 1; if (n2 > n1) return -1; } var sp1 = s1[s1.length - 1]; var sp2 = s2[s2.length - 1]; if (sp1 && sp2) { var p1 = sp1.split('.').map(tryParse); var p2 = sp2.split('.').map(tryParse); for (i = 0; i < Math.max(p1.length, p2.length); i++) { if (p1[i] === undefined || typeof p2[i] === 'string' && typeof p1[i] === 'number') return -1; if (p2[i] === undefined || typeof p1[i] === 'string' && typeof p2[i] === 'number') return 1; if (p1[i] > p2[i]) return 1; if (p2[i] > p1[i]) return -1; } } else if (sp1 || sp2) { return sp1 ? -1 : 1; } return 0; }; }));