♻️ refactor(substore): 优化 alphaair 重命名规则与排序逻辑

This commit is contained in:
Orion
2026-06-03 09:55:44 +08:00
parent 3f3e4731c4
commit 93bb6a7a6c
2 changed files with 24 additions and 7 deletions
+7 -4
View File
@@ -21,7 +21,7 @@
| `sntp-rename.js` | SNTP 单订阅 | 注入 `[三网]``[CF]``[直连]``[cn2]` 等线路标签 |
| `yuetong-rename.js` | YueTong 单订阅 | 去掉 `悦·``💎`,把 `AI解锁` 压成 `AI` |
| `peiqian-rename.js` | PeiQian 单订阅 | 压短 `电信联通推荐``移动联通推荐``高速专线``hy2`、倍率和用途描述 |
| `alphaair-rename.js` | Alpha Air 单订阅 | 去掉供应商/提供者/三网/家宽文案,保留地区、城市码、倍率并连续编号 |
| `alphaair-rename.js` | Alpha Air 单订阅 | 去掉提供者/三网/家宽文案,普通节点保留地区,高级非倍率节点保留供应商,倍率节点保留倍率并连续编号 |
| `rename.js` | 整合订阅 | 统一国家/城市短码,移动国旗到首部,追加 `- _subName`,处理重名编号 |
## SNTP 规则
@@ -92,7 +92,7 @@
## Alpha Air 规则
`alphaair-rename.js` 建议挂在 Alpha Air 单条订阅里使用。它会把 Alpha Air 的供应商、提供者和线路文案压掉,并在该订阅内部按地区和倍率编号;之后再交给全局 `rename.js` 追加订阅后缀。
`alphaair-rename.js` 建议挂在 Alpha Air 单条订阅里使用。它会把 Alpha Air 的提供者和线路文案压掉;普通节点只保留地区,高级非倍率节点保留供应商标签,倍率家宽节点只保留倍率;之后再交给全局 `rename.js` 追加订阅后缀。
```text
🇺🇸 4X|美国夏威夷家宽|三网1
@@ -101,8 +101,11 @@
3X 🇨🇳 台湾家宽Hinet|COP
=> 🇹🇼 TW 3X 01
🇳🇱 搬瓦工荷兰|JC
=> 🇳🇱 NL 01
🇭🇰 SkyStroll|毕业
=> 🇭🇰 HK SkyStroll 01
香港HKT
=> 🇭🇰 HK 01
```
## 全局重命名
+17 -3
View File
@@ -1,7 +1,8 @@
/**
* Alpha Air 专用节点清理脚本
* - 压掉供应商、提供者、三网、家宽等 Alpha Air 专属文案
* - 保留地区、城市码和倍率,按地区内倍率排序并连续编号
* - 压掉提供者、三网、家宽等 Alpha Air 专属文案
* - 普通节点只保留地区,非倍率高级节点保留供应商,倍率节点保留倍率
* - 按地区内“普通 -> 倍率 -> 高级”排序并连续编号
* - 不追加订阅后缀,整合订阅最后仍交给 rename.js 处理
*/
function operator(proxies) {
@@ -93,6 +94,13 @@ function operator(proxies) {
return match ? `${match[1]}X` : '';
};
const providerOf = name => {
if (/SkyStroll/i.test(name)) return 'SkyStroll';
if (/isif/i.test(name)) return 'ISIF';
if (/(?:搬瓦工|Bandwagon|BWH|BWG)/i.test(name)) return 'BWH';
return '';
};
const leadingRegionPrefixOf = name => {
const match = name.match(/^([A-Z]{2})(?:\s+([A-Z]{3}))?(?=\s|$|-|\d|\|)/);
if (!match) return '';
@@ -132,6 +140,7 @@ function operator(proxies) {
const regionCode = regionPrefix.split(/\s+/)[0];
const cityCode = regionPrefix.split(/\s+/)[1] || '';
const multiplier = multiplierOf(text);
const provider = multiplier ? '' : providerOf(text);
const normalizedFlag = regionCodeToFlag(regionCode);
return {
@@ -139,8 +148,10 @@ function operator(proxies) {
originalIndex,
countryCode: regionCode,
cityCode,
provider,
providerRank: provider ? 1 : 0,
multiplierValue: multiplier ? Number(multiplier.replace(/X$/i, '')) : Number.NEGATIVE_INFINITY,
normalizedName: [normalizedFlag, regionPrefix, multiplier].filter(Boolean).join(' ').trim()
normalizedName: [normalizedFlag, regionPrefix, provider, multiplier].filter(Boolean).join(' ').trim()
};
};
@@ -160,6 +171,9 @@ function operator(proxies) {
const firstOrder = countryOrder[firstItem.countryCode];
const secondOrder = countryOrder[secondItem.countryCode];
if (firstOrder !== secondOrder) return firstOrder - secondOrder;
if (firstItem.providerRank !== secondItem.providerRank) {
return firstItem.providerRank - secondItem.providerRank;
}
if (firstItem.multiplierValue !== secondItem.multiplierValue) {
return firstItem.multiplierValue - secondItem.multiplierValue;
}