Flclash覆写脚本分享13-分流规则覆盖改为了合并,使用现代 JS 语法重构,更清爽

2026-04-13 13:171阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

image1629×602 75.9 KB
感谢 阿松 的反馈,这版脚本的内置规则已经从覆盖改为了合并,先后顺序采用了三明治规则架构,屏蔽广告/内网直连 机场自带规则 GFW/CN。解决了(应该)运行脚本后有时候会出现的配置加载失败问题。使用现代 JS 语法重构,减少了不必要的冗余循环(好像这句话的“不必要”和“冗余”就“冗余”和“不必要”了),理论运行速度更快,脚本仅不到80行。
你的头为什么尖尖的847×1583 76.8 KB

偷懒复制粘贴一下脚本仓库的修改记录:

  • scripts13:在scripts12基础上修改,将原来的分流规则覆盖改为了合并,最高优先级屏蔽广告/内网直连 机场自带规则 GFW/CN 泛解析兜底。自动拦截并修复失效的策略组指向(重定向至“节点选择”),告别了 proxy not found 导致的配置加载失败。使用现代 JS 语法全面重构了底层逻辑,减少了冗余循环,脚本运行更快、代码更清爽。仅不到80行

脚本仓库地址如下:

github.com

GitHub - ZipZhu/Flclash-scripts: A repository for Flclash scripts

A repository for Flclash scripts

scripts13:

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 ratioRegex = /(?:\[(\d+(?:\.\d+)?)\s*(?:x|X|×)\]|(\d+(?:\.\d+)?)\s*(?:x|X|×|倍)|(?:x|X|×|倍)\s*(\d+(?:\.\d+)?))/i; const blackListRegex = /(?<!集)群|邀请|返利|官方|网址|订阅|购买|续费|剩余|到期|过期|流量|备用|邮箱|客服|联系|工单|倒卖|防止|梯子|tg|发布|重置/i; const originalProxies = config.proxies || []; const filteredProxies = originalProxies.filter(p => { if (!p?.name || blackListRegex.test(p.name)) return false; const match = p.name.match(ratioRegex); return !(match && parseFloat(match[1] || match[2] || match[3]) > 3.0); }); if (!filteredProxies.length && !originalProxies.length) return config; const proxiesWithNorm = filteredProxies.map(p => ({ ...p, __normName: p.name.trim().replace(/\s+/g, '').replace(/[【】[\]()()]/g, '').replace(/🇺🇸/g, 'US').replace(/🇯🇵/g, 'JP').replace(/🇸🇬/g, 'SG').replace(/🇭🇰/g, 'HK').replace(/🇹🇼/g, 'TW') })); 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 activeRegions = REGIONS.map(region => { const regex = new RegExp(region.pattern.split('|').map(k => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|'), 'i'); return { ...region, proxies: proxiesWithNorm.filter(p => regex.test(p.__normName)).map(p => p.name) }; }).filter(r => r.proxies.length > 0); const regionNames = activeRegions.map(r => r.name); const proxyGroups = [ { name: "节点选择", icon: `${ICON_BASE}Proxy.png`, type: "select", proxies: [...regionNames, "手动切换"] }, ...activeRegions.map(r => ({ name: r.name, icon: `${ICON_BASE}${r.icon}`, type: "url-test", proxies: r.proxies, interval: 300, tolerance: 50 })), { name: "手动切换", icon: `${ICON_BASE}Available.png`, "include-all": true, type: "select" }, { name: "GLOBAL", icon: `${ICON_BASE}Global.png`, type: "select", proxies: ["节点选择", ...regionNames, "手动切换", "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" } }; const validTargets = new Set(["DIRECT", "REJECT", "REJECT-DROP", "PASS", ...proxyGroups.map(g => g.name), ...originalProxies.map(p => p.name)]); const customRules = (config.rules || []) .filter(rule => !rule.startsWith("MATCH,")) .map(rule => { let parts = rule.split(','); if (parts.length >= 3 && !validTargets.has(parts[2].trim())) parts[2] = "节点选择"; return parts.join(','); }); config["rules"] = [ "RULE-SET,LocalAreaNetwork,DIRECT", "RULE-SET,UnBan,DIRECT", "RULE-SET,BanAD,REJECT", "RULE-SET,BanProgramAD,REJECT", ...customRules, "RULE-SET,ProxyGFWlist,节点选择", "RULE-SET,ChinaDomain,DIRECT", "GEOIP,CN,DIRECT", "MATCH,节点选择" ]; config.proxies = originalProxies; return config; }

欢迎使用和反馈,祝各位佬友新年快乐,钱包鼓得像 inflation,事业旺得像春运,心情爽得像放假!吃嘛嘛香,干啥啥成,桃花也旺旺!

网友解答:
--【壹】--:

配置里面是有,但是访问b站没有命中这个规则是走代理的,改成classical就走直连了


--【贰】--:

已经点星支持了,谢谢分享


--【叁】--:

我也自己改了一个!

加了住宅ip落地的覆盖脚本

// ================= 配置区域 ================= // 1. 家宽(住宅IP)落地节点配置列表 (只需修改此配置列表,代码将自动适配) // 【注意】:让AI修改替换为你真实的节点信息,下面是ss节点的示范 const landingConfigs = [ { server: "你的节点域名或IP_1", port: xxx, cipher: "", password: "你的密码_1" }, { server: "你的节点域名或IP_2", port: xxx, cipher: "", password: "你的密码_2" } // 想要第 3 条家宽?只需像这样加一行: // ,{ server: "xxx.com", port: xxx, cipher: "", password: "xxx" } ]; // 2. 核心策略组名称定义 const homeSelectorName = "家宽"; const chainFrontGroup = "家宽前置"; const autoGroupName = "自动选择"; const mainSelectorName = "节点选择"; // 3. 【一】最高优先级规则 (雷打不动,最先匹配) const topRules = [ // [特权放行] 国内特殊软件强制直连 "PROCESS-NAME,MinerU.exe,DIRECT", "PROCESS-NAME,Weixin.exe,DIRECT", // [局域网与防误杀] "RULE-SET,LocalAreaNetwork,DIRECT", "RULE-SET,UnBan,DIRECT", // [广告拦截] "RULE-SET,BanAD,REJECT", "RULE-SET,BanProgramAD,REJECT", // [核心生产力] 网页端 AI、手机App、谷歌域名放AI服务组走家宽 "PROCESS-NAME,com.anthropic.claude,AI服务", "PROCESS-NAME,com.openai.chatgpt,AI服务", "GEOSITE,category-ai-chat-!cn,AI服务", "GEOSITE,openai,AI服务", "GEOSITE,anthropic,AI服务", "GEOSITE,google,谷歌服务", "GEOIP,google,谷歌服务,no-resolve" ]; // 4. 【三】泛解析兜底 (在机场自带规则之后生效,防止漏网) const bottomRules = [ "RULE-SET,ProxyGFWlist,其他", "RULE-SET,ChinaDomain,DIRECT", "GEOIP,cn,DIRECT,no-resolve" ]; // 5. 自定义 Rule Providers (引入 ACL4SSR 订阅源) const RULE_BASE = "https://cdn.jsdelivr.net/gh/ACL4SSR/ACL4SSR@master/Clash/"; const customProviders = { 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" } }; // ================= 主逻辑区域 ================= function main(config) { let c = config; c.proxies = c.proxies || []; // 合并 Rule Providers c["rule-providers"] = { ...(c["rule-providers"] || {}), ...customProviders }; // 提取可用节点 const manualProxies = c.proxies.map(p => p.name).filter(p => p !== "DIRECT" && p !== "REJECT"); const providerNames = c["proxy-providers"] ? Object.keys(c["proxy-providers"]) : []; if (manualProxies.length === 0 && providerNames.length === 0) manualProxies.push("DIRECT"); // 动态生成家宽节点名称列表 const homeNodeNames = landingConfigs.map((_, index) => `家宽${index + 1}`); // 重建精简策略组 c["proxy-groups"] = []; c["proxy-groups"].push( { name: mainSelectorName, type: "select", proxies: [autoGroupName, homeSelectorName, "DIRECT", ...manualProxies], use: providerNames }, { name: chainFrontGroup, type: "select", proxies: [autoGroupName, ...manualProxies], use: providerNames }, { name: homeSelectorName, type: "select", proxies: homeNodeNames }, { name: autoGroupName, type: "url-test", url: "http://www.gstatic.com/generate_204", interval: 300, tolerance: 50, proxies: manualProxies, use: providerNames } ); ["AI服务", "谷歌服务"].forEach(name => c["proxy-groups"].push({ name: name, type: "select", proxies: [homeSelectorName, mainSelectorName] })); ["其他", "兜底"].forEach(name => c["proxy-groups"].push({ name: name, type: "select", proxies: [mainSelectorName, homeSelectorName, "DIRECT"] })); // 注入家宽代理节点 landingConfigs.forEach((cfg, index) => { c.proxies.push({ name: homeNodeNames[index], type: "ss", server: cfg.server, port: cfg.port, cipher: cfg.cipher, password: cfg.password, udp: true, "dialer-proxy": chainFrontGroup }); }); // 处理 【二】机场原生规则 let airportRules = c.rules || []; airportRules = airportRules.filter(r => !r.toUpperCase().startsWith("MATCH,")); const validGroups = ["DIRECT", "REJECT", "AI服务", "谷歌服务", "其他", "兜底", mainSelectorName, homeSelectorName, autoGroupName, chainFrontGroup]; airportRules = airportRules.map(rule => { let parts = rule.split(","); if (parts.length >= 3 && !validGroups.includes(parts[2])) parts[2] = "其他"; return parts.join(","); }); // 🌟 终极拼装:Top规则(特权/拦截/AI) -> 机场细分规则 -> GFW/CN 泛解析兜底 -> MATCH c.rules = [...topRules, ...airportRules, ...bottomRules, "MATCH,兜底"]; return c; }


--【肆】--:

这个在手机上是不是也能用


--【伍】--:

感谢大佬


--【陆】--:

非常好用,感谢分享


--【柒】--:

感谢大佬!


--【捌】--:

大佬太强了,感谢分享。


--【玖】--:

1772982172103_d1094×1217 206 KB
这个domain里面都是这个格式


--【拾】--:

谢谢分享~


--【拾壹】--: ZipZhu:

ChinaDomain: { url:${RULE_BASE}ChinaDomain.list, path: "./ruleset/ChinaDomain.list", behavior: "domain",

ChinaDomain: { url: ${RULE_BASE}ChinaDomain.list, path: “./ruleset/ChinaDomain.list”, behavior: “domain”,这个domain 应该改为classical,否则不生效 @ZipZhu


--【拾贰】--:

感觉 Flclash 确实挺好用,虽然 Karing 也不差,但是感觉比较重和慢点。


--【拾叁】--:

是的是的(不能少于四个字符,所以复读了一下)


--【拾肆】--:

能生效
image1233×954 95 KB
image1214×806 37.9 KB


--【拾伍】--:

我刚刚去 https://cdn.jsdelivr.net/gh/ACL4SSR/ACL4SSR@master/Clash/ChinaDomain.list ,查看了一下 ChinaDomain.list 原来不是纯域名,因为他叫ChinaDomain,我错误的认为里面是纯域名,所以将 behavior 设置为了 domain ,感谢您指出错误,已在脚本仓库中同步该修改


--【拾陆】--:

感谢分享。


--【拾柒】--:

脚本报错了,好像是没这个规则?