⚡perf(substore): 优化悦东节点重命名排序,重构地区连续编号机制避免撞号
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* YueTong 专用节点清理脚本
|
||||
* 负责去掉“悦·”品牌前缀、钻石、专属/家宽等线路标识,以及压短 AI 解锁文案。
|
||||
* 保留线路标识后面的序号,并按地区稳定归并。
|
||||
* 按地区稳定归并后重新连续编号,避免专属/普通节点撞号。
|
||||
*/
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
function operator(proxies) {
|
||||
@@ -86,6 +86,41 @@ function operator(proxies) {
|
||||
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) => {
|
||||
if (typeof proxy.name !== 'string') {
|
||||
return {
|
||||
@@ -127,5 +162,12 @@ function operator(proxies) {
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user