From 313e77421bbb17b821642bb36d6160244758178a Mon Sep 17 00:00:00 2001 From: Orion Date: Wed, 3 Jun 2026 14:56:42 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(substore):=20?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=87=8D=E5=91=BD=E5=90=8D=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E5=B9=B6=E6=9B=B4=E6=96=B0=E5=85=AC=E5=85=B1=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- substore/alphaair-rename.js | 2 +- substore/liangxin-rename.js | 2 +- substore/peiqian-rename.js | 2 +- substore/rename.js | 41 +++++++++++++++++++++++++++++++++++-- substore/sntp-rename.js | 2 +- substore/yuetong-rename.js | 2 +- 6 files changed, 44 insertions(+), 7 deletions(-) diff --git a/substore/alphaair-rename.js b/substore/alphaair-rename.js index 7daa922..7553e28 100644 --- a/substore/alphaair-rename.js +++ b/substore/alphaair-rename.js @@ -6,7 +6,7 @@ * - 不追加订阅后缀,整合订阅最后仍交给 rename.js 处理 */ // noinspection JSUnusedGlobalSymbols -const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js'; +const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js?v=20260603-2'; async function loadRenameUtils() { if (typeof globalThis !== 'undefined' && globalThis.SubStoreRenameUtils) { diff --git a/substore/liangxin-rename.js b/substore/liangxin-rename.js index c98d90a..692958d 100644 --- a/substore/liangxin-rename.js +++ b/substore/liangxin-rename.js @@ -3,7 +3,7 @@ * 负责去掉高速、BGP、CMCU 等 LiangXin 线路描述,保留地区、序号和倍率。 */ // noinspection JSUnusedGlobalSymbols -const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js'; +const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js?v=20260603-2'; async function loadRenameUtils() { if (typeof globalThis !== 'undefined' && globalThis.SubStoreRenameUtils) { diff --git a/substore/peiqian-rename.js b/substore/peiqian-rename.js index ae37050..b4b423f 100644 --- a/substore/peiqian-rename.js +++ b/substore/peiqian-rename.js @@ -3,7 +3,7 @@ * 负责清理推荐、用途、hy2、倍率、线路特征和提供商等 PeiQian 节点文案。 */ // noinspection JSUnusedGlobalSymbols -const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js'; +const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js?v=20260603-2'; async function loadRenameUtils() { if (typeof globalThis !== 'undefined' && globalThis.SubStoreRenameUtils) { diff --git a/substore/rename.js b/substore/rename.js index fb4601c..fc14793 100644 --- a/substore/rename.js +++ b/substore/rename.js @@ -5,7 +5,7 @@ * - 基于归一化后的完整名称做精准去重 */ // noinspection JSUnusedGlobalSymbols -const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js'; +const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js?v=20260603-2'; async function loadRenameUtils() { if (typeof globalThis !== 'undefined' && globalThis.SubStoreRenameUtils) { @@ -26,6 +26,43 @@ async function loadRenameUtils() { async function operator(proxies) { const utils = await loadRenameUtils(); + const normalizeHyphenatedRegionFeatures = utils.normalizeHyphenatedRegionFeatures || (name => { + const hyphenatedMatch = String(name).match(/^([A-Z]{2})(?:\s+([A-Z]{3}))?-(.+)$/); + if (!hyphenatedMatch) return name; + + const countryCode = hyphenatedMatch[1]; + let regionCode = hyphenatedMatch[2] + ? `${countryCode} ${hyphenatedMatch[2]}` + : countryCode; + const tokens = hyphenatedMatch[3].split('-').map(token => token.trim()).filter(Boolean); + + if ( + !hyphenatedMatch[2] && + tokens.length >= 2 && + /^[A-Z]{3}$/.test(tokens[0]) && + /^\d{1,2}$/.test(tokens[1]) + ) { + regionCode = `${countryCode} ${tokens.shift()}`; + } + + const sequenceIndex = tokens.findIndex(token => /^\d{1,2}$/.test(token)); + if (sequenceIndex === -1) return name; + + const sequenceNumber = tokens[sequenceIndex].padStart(2, '0'); + const ingressTokens = tokens + .slice(0, sequenceIndex) + .map(token => token.toUpperCase()); + const egressTokens = tokens.slice(sequenceIndex + 1); + const featureText = ingressTokens.length && egressTokens.length + ? `${ingressTokens.join('-')}-${egressTokens.join('-')}` + : [...ingressTokens, ...egressTokens].join('-'); + + return [regionCode, sequenceNumber, featureText] + .filter(Boolean) + .join(' ') + .replace(/\s{2,}/g, ' ') + .trim(); + }); const globalCount = Object.create(null); const currentCount = Object.create(null); const baseNames = new Array(proxies.length); @@ -770,7 +807,7 @@ async function operator(proxies) { core = joinAlias(flagRegionCode, core); } - core = normalizeRegionSequence(utils.normalizeHyphenatedRegionFeatures(moveMultiplierToEnd(simplifyCoreName(core)))) + core = normalizeRegionSequence(normalizeHyphenatedRegionFeatures(moveMultiplierToEnd(simplifyCoreName(core)))) .replace(/^([A-Z]{2}(?:\s+[A-Z]{3})?\s+\d{2}\s+(?:标准|高级))\s+1(?=$|\s)/i, '$1'); return flag ? `${flag} ${core}` : core; diff --git a/substore/sntp-rename.js b/substore/sntp-rename.js index 304fa37..126e390 100644 --- a/substore/sntp-rename.js +++ b/substore/sntp-rename.js @@ -4,7 +4,7 @@ * 维护说明:仅需修改 featureMap 字典即可,底部逻辑永远无需改动。 */ // noinspection JSUnusedGlobalSymbols -const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js'; +const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js?v=20260603-2'; async function loadRenameUtils() { if (typeof globalThis !== 'undefined' && globalThis.SubStoreRenameUtils) { diff --git a/substore/yuetong-rename.js b/substore/yuetong-rename.js index 6740ad3..e63bea1 100644 --- a/substore/yuetong-rename.js +++ b/substore/yuetong-rename.js @@ -4,7 +4,7 @@ * 按地区稳定归并后重新连续编号,避免专属/普通节点撞号。 */ // noinspection JSUnusedGlobalSymbols -const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js'; +const COMMON_SCRIPT_URL = 'https://git.orionc.me/orion/script/raw/branch/main/substore/common.js?v=20260603-2'; async function loadRenameUtils() { if (typeof globalThis !== 'undefined' && globalThis.SubStoreRenameUtils) {