王一之 发表于 2025-6-19 09:37
可能初期就只适配简单的规则
哈哈,可以的可以的,本来就是更人性化的小功能,常用的能点击跳转就挺不错了!😏

我在想一个问题:如果碰到【上图】这种脚本匹配了一堆域名的、再加上如果有用户安装了数十个【类似这种多域名的脚本】,这样一来,因为这个小功能,会不会导致这个用户进入列表,非常慢或卡?!为了这么个人性化的功能,把插件弄卡了,反而得不偿失~~~【PS:我特地试了下Tampermonkey来着,发现它是瞬间列表加载出来,然后【站点(也就是图标)】再一个个的嗖一下出来(我出来的快可能是因为我装的脚本不多、而且就上图那两个站点多的脚本),可以看得出来,它站点是在列表后加载的,这个咱也可以考虑进去】
下面是杂谈:🤪
今天事情不多,折腾DeepSeek折腾了个把小时,头一次遇到思考过程
将近500行,而回答内容
只有短短100行出头,笑死我了,真是难为DeepSeek了,突然发现如果AI再强大个几倍、一点点智障都没有的话,感觉算法工程师的路也要没了,只要需求给它说的够清楚就行(我今天让它分析时、就发现智障了好几次、虽然智障了几次、但后面纠正几遍后,发现它竟然发现了我没发现的规律、然后思路比我清晰多了🤣)🤣🤣🤣
最后,得出了这么一段代码:
function processUrlPattern(pattern: string): string {
// 检查是否包含"://"
const protocolEnd = pattern.indexOf('://');
if (protocolEnd === -1) {
return '';
}
// 1. 提取协议部分
const protocol = protocolEnd >= 0 ? pattern.substring(0, protocolEnd) : '';
const rest = protocolEnd >= 0 ? pattern.substring(protocolEnd + 3) : pattern;
// 2. 提取主机部分(到第一个斜杠或结尾)
const firstSlash = rest.indexOf('/');
const host = firstSlash >= 0 ? rest.substring(0, firstSlash) : rest;
// 处理没有主机部分的情况
if (!host) {
return "";
}
// 3. 验证主机是否包含有效域名结构
const domainLevels = host.split('.');
// 从后向前扫描域名层级,统计有效段数
let validLevelCount = 0;
// 从后向前扫描域名层级
for (let i = domainLevels.length - 1; i >= 0; i--) {
const segment = domainLevels[i];
if (segment.includes('*')) {
break;
}
validLevelCount++;
}
// 4. 域名有效性判断(至少两级有效域名)
if (validLevelCount < 2) {
return '';
}
// 5. 提取有效域名部分(最后validLevelCount个层级)
const validDomain = domainLevels.slice(domainLevels.length - validLevelCount).join('.');
// 6. 协议处理逻辑:根据协议类型决定输出格式
if (protocol === 'http' || protocol === 'https') {
return `${protocol}://${validDomain}/`;
} else if (protocol.includes('*') || protocol === '') {
return validDomain;
}
// 最后:其他协议类型或无法预料的情况统统都返回空
return '';
}

