⚡perf(substore): 优化悦东节点重命名排序,重构地区连续编号机制避免撞号
This commit is contained in:
@@ -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;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user