先容我偷个懒,复制粘贴一下之前写过的日志:

  • scripts10:jsDelivr 近期加强了对代理相关规则仓库的限制,导致直接通过 cdn.jsdelivr.net 访问这些链接时会提示 “User blocked”。所以切换至稳定的 GitHub Raw 链接。同时引入了 AI 专项和精细的大厂服务分流,因为现在不仅使用了 ACL4SSR 维护的规则列表,所以取消了变量拼接。规则提供者从 10 个扩展至约 23 个,融合 Loyalsoldier 与 ACL4SSR 规则集,新增了对 AI、Telegram、Netflix 等海外服务的专用代理支持,以及更彻底的广告与隐私追踪阻断(如 EasyPrivacy、BanEasyListChina),分流逻辑更精细全面。
  • scripts11:移除了大量的尤其是去广告方面的规则,回归简洁,仅保留必要功能和规则。scripts10 的规则过多,性能差。去广告方面的效果提升微乎其微,尤其是 app 内的广告,但是安卓 7 以上的手机不 root 无法 mitm。
  • scripts12:在 scripts11 基础上, 新增 normalizeName() 函数,先对节点名称做 “归一化”,自动识别并转换国旗 emoji,去除空格、括号等干扰字符,提升匹配准确率。地区识别新增了三字码和机场码,覆盖更多机场命名规范。

我不喜欢 scripts10, 我认为他规则过多,性能差,还没多少用。而 scripts12scripts11 的改进版本,所以我在这里只放 scripts12,如果对 scripts10 这一大坨感兴趣的可以去该仓库查看 GitHub - ZipZhu/Flclash-scripts: A repository for Flclash scripts
scripts10 是一个糟糕的尝试,写出这种东西的我应该被挂到晾衣杆上晒太阳。

以后不会再在规则上做过多添加和修改,我总是会想起那恐怖的一坨,让我十分的生理不适。

前面发过一个帖子向站内的佬友们咨询了一下 win + 安卓换苹果全家桶的一些问题,现在几乎已经打定主意换苹果全家桶了。不过我还是想在等一手 apple intelligence 和新设备发布,应该会在未来一两年内全部更新为苹果全家桶。

话说 iphone/ipad/macos 全平台的代理工具,不知道佬友们在用什么,可以分享一下你。最近有所了解和关注,loon 的社区好像是最活跃的,除此之外我还有在考虑 surge。也许等我换了设备之后会停止 flclash 的脚本更新,转而去做 loon 插件?话说站内几乎没有人在分享 loon/surge/qx/stash 的插件和配置,想来是因为涉及应用内广告屏蔽和部分高级功能解锁,不便公开传播。

心情突然有点复杂?想要通过表情包这种预制情感包,表达一下来着,却没找见那张表情包,不知道是云同步的时候被吞了还是被 Eagle 吞了。。。

以下是 scripts12

function main(config) {
  const ICON_BASE = "https://cdn.jsdelivr.net/gh/Koolson/Qure@master/IconSet/Color/";
  const RULE_BASE = "https://cdn.jsdelivr.net/gh/ACL4SSR/ACL4SSR@master/Clash/";

  const maxRatio = 3.0;
  const ratioRegex = /(?:\[(\d+(?:\.\d+)?)\s*(?:x|X|×)\]|(\d+(?:\.\d+)?)\s*(?:x|X|×|倍)|(?:x|X|×|倍)\s*(\d+(?:\.\d+)?))/i;

  const filterKeywords = '群|邀请|返利|官网|官方|网址|订阅|购买|续费|剩余|到期|过期|流量|备用|邮箱|客服|联系|工单|倒卖|防止|梯子|tg|发布|重置';
  const blackListRegex = new RegExp(filterKeywords);

  function normalizeName(name = '') {
    return String(name)
      .trim()
      .replace(/\s+/g, '')
      .replace(/[【】[\]()()]/g, '')
      .replace(/🇺🇸/g, 'US')
      .replace(/🇯🇵/g, 'JP')
      .replace(/🇸🇬/g, 'SG')
      .replace(/🇭🇰/g, 'HK')
      .replace(/🇹🇼/g, 'TW');
  }

  function buildRegionRegex(region) {
    const keywords = region.pattern.split('|');
    const escaped = keywords.map(k => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
    return new RegExp(escaped.join('|'), 'i');
  }

  const originalProxies = config.proxies || [];

  const filteredProxies = originalProxies.filter(proxy => {
    if (!proxy || !proxy.name) return false;

    if (blackListRegex.test(proxy.name)) return false;

    const ratioMatch = proxy.name.match(ratioRegex);
    if (ratioMatch) {
      const ratio = parseFloat(ratioMatch[1] || ratioMatch[2] || ratioMatch[3]);
      if (ratio > maxRatio) return false;
    }
    return true;
  });

  if (filteredProxies.length === 0 && originalProxies.length === 0) return config;

  const REGIONS = [
    { name: "美国节点", pattern: "美国|美|US|USA|UnitedStates|United States|纽约|NewYork|NYC|JFK|洛杉矶|LosAngeles|LAX|旧金山|SanFrancisco|SFO|圣何塞|SanJose|SJC|西雅图|Seattle|SEA|芝加哥|Chicago|ORD|达拉斯|Dallas|DFW|硅谷|SiliconValley", icon: "United_States.png" },
    { name: "日本节点", pattern: "日本|日|JP|JPN|Japan|东京|Tokyo|TYO|NRT|HND|大阪|Osaka|KIX", icon: "Japan.png" },
    { name: "狮城节点", pattern: "新加坡|狮城|SG|SGP|Singapore|SIN", icon: "Singapore.png" },
    { name: "香港节点", pattern: "香港|港|HK|HKG|HongKong|Hong Kong", icon: "Hong_Kong.png" },
    { name: "台湾节点", pattern: "台湾|台|TW|TWN|Taiwan|台北|Taipei|TPE|新北|NewTaipei", icon: "Taiwan.png" }
  ];

  const proxiesWithNorm = filteredProxies.map(p => ({
    ...p,
    __normName: normalizeName(p.name)
  }));

  const validRegions = [];
  for (const region of REGIONS) {
    const regex = buildRegionRegex(region);
    if (proxiesWithNorm.some(proxy => regex.test(proxy.__normName))) {
      validRegions.push({ ...region, regex });
    }
  }

  const validRegionNames = validRegions.map(r => r.name);

  const proxyGroups = [];

  proxyGroups.push({ name: "节点选择", icon: `${ICON_BASE}Proxy.png`, type: "select", proxies: [...validRegionNames, "手动切换"] });

  for (const region of validRegions) {
    const regionProxies = proxiesWithNorm
      .filter(proxy => region.regex.test(proxy.__normName))
      .map(proxy => proxy.name);

    if (regionProxies.length > 0) {
      proxyGroups.push({ name: region.name, icon: `${ICON_BASE}${region.icon}`, type: "url-test", proxies: regionProxies, interval: 300, tolerance: 50 });
    }
  }

  proxyGroups.push({ name: "手动切换", icon: `${ICON_BASE}Available.png`, "include-all": true, type: "select" });
  proxyGroups.push({ name: "GLOBAL", icon: `${ICON_BASE}Global.png`, type: "select", proxies: ["节点选择", ...validRegionNames, "手动切换", "DIRECT"] });

  config["proxy-groups"] = proxyGroups;

  config["rule-providers"] = {
    LocalAreaNetwork: { url: `${RULE_BASE}LocalAreaNetwork.list`, path: "./ruleset/LocalAreaNetwork.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    UnBan: { url: `${RULE_BASE}UnBan.list`, path: "./ruleset/UnBan.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    BanAD: { url: `${RULE_BASE}BanAD.list`, path: "./ruleset/BanAD.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    BanProgramAD: { url: `${RULE_BASE}BanProgramAD.list`, path: "./ruleset/BanProgramAD.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    ProxyGFWlist: { url: `${RULE_BASE}ProxyGFWlist.list`, path: "./ruleset/ProxyGFWlist.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    ChinaDomain: { url: `${RULE_BASE}ChinaDomain.list`, path: "./ruleset/ChinaDomain.list", behavior: "domain", interval: 86400, format: "text", type: "http" }
  };

  config["rules"] = [
    "RULE-SET,LocalAreaNetwork,DIRECT",
    "RULE-SET,UnBan,DIRECT",
    "RULE-SET,BanAD,REJECT",
    "RULE-SET,BanProgramAD,REJECT",
    "RULE-SET,ProxyGFWlist,节点选择",
    "RULE-SET,ChinaDomain,DIRECT",
    "GEOIP,CN,DIRECT",
    "MATCH,节点选择"
  ];

  config.proxies = originalProxies;
  return config;
}

📌 转载信息
原作者:
ZipZhu
转载时间:
2026/1/12 10:16:45

标签: none

添加新评论