perf(substore): 优化悦东节点重命名排序,重构地区连续编号机制避免撞号

This commit is contained in:
Orion
2026-06-03 12:41:36 +08:00
parent 37d257af6d
commit d60d1f2709
+44 -2
View File
@@ -1,7 +1,7 @@
/** /**
* YueTong 专用节点清理脚本 * YueTong 专用节点清理脚本
* 负责去掉“悦·”品牌前缀、钻石、专属/家宽等线路标识,以及压短 AI 解锁文案。 * 负责去掉“悦·”品牌前缀、钻石、专属/家宽等线路标识,以及压短 AI 解锁文案。
* 保留线路标识后面的序号,并按地区稳定归并。 * 按地区稳定归并后重新连续编号,避免专属/普通节点撞号
*/ */
// noinspection JSUnusedGlobalSymbols // noinspection JSUnusedGlobalSymbols
function operator(proxies) { function operator(proxies) {
@@ -86,6 +86,41 @@ function operator(proxies) {
return ''; return '';
}; };
const splitLeadingFlag = name => {
const leadingFlagMatch = name.match(leadingFlagRegex);
if (!leadingFlagMatch) return { flag: '', text: name.trim() };
return {
flag: leadingFlagMatch[1],
text: name.slice(leadingFlagMatch[0].length).trim()
};
};
const withFreshRegionSequence = (name, sequenceNumber) => {
const { flag, text } = splitLeadingFlag(name);
const sequenceText = String(sequenceNumber);
let core = text.trim();
let feature = '';
core = core.replace(/\s*AI\s*\d+(?!\d)(?!\s*(?:[xX倍]|\.\d))/, () => {
feature = 'AI';
return '';
});
if (!feature) {
core = core.replace(/\s+AI\b|AI$/, () => {
feature = 'AI';
return '';
});
}
core = core
.replace(/\s*\d+(?!\d)(?!\s*(?:[xX倍]|\.\d))(?=\s|$)/, '')
.replace(/\s{2,}/g, ' ')
.trim();
return `${flag}${core}${sequenceText}${feature ? ` ${feature}` : ''}`.trim();
};
const normalizedItems = proxies.map((proxy, originalIndex) => { const normalizedItems = proxies.map((proxy, originalIndex) => {
if (typeof proxy.name !== 'string') { if (typeof proxy.name !== 'string') {
return { return {
@@ -127,5 +162,12 @@ function operator(proxies) {
return firstItem.originalIndex - secondItem.originalIndex; return firstItem.originalIndex - secondItem.originalIndex;
}); });
return normalizedItems.map(item => item.proxy); const regionCount = Object.create(null);
return normalizedItems.map(item => {
if (!item.regionCode) return item.proxy;
regionCount[item.regionCode] = (regionCount[item.regionCode] || 0) + 1;
item.proxy.name = withFreshRegionSequence(item.proxy.name, regionCount[item.regionCode]);
return item.proxy;
});
} }