Clash 全局扩展脚本:智能控制网站代理访问

这是对上篇博客的更新 clash verge 订阅扩展规则,防止部分学术网站走代理
上篇博客中的解决方案存在一个问题:每个订阅都需要设置一次,为了更加方便地将设置应用到全部订阅中,可以在clash verge 全局扩展脚本中设置代码

步骤:

  1. 打开clash verge
  2. 点击订阅,右键全局扩展配置,点击编辑文件
    alt text
  3. 将下方的代码替换进去
  4. 最后,请记得更新所有订阅以应用这项更改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// Define main function (script entry) 

function main(config, profileName) {
// 根据名称排除节点
config = removeNodeByName(config, /[kK]onghwaguk/g);

// 新增:为美国、台湾、新加坡节点创建 AI 代理组
config = addAITestGroup(config);
// 添加代理规则
config = addProxyRules(config);

// 添加直连规则
config = addDirectRules(config);

return config;
}

function addAITestGroup(config) {
if (!config['proxy-groups'] || !config.proxies) return config;

// 收集包含“美国”/“台湾”/“新加坡”关键词的节点
const aiNodes = config.proxies.filter(p =>
p.name && /(美国|usa|united\s?states|台湾|taiwan|新加坡|singapore)/i.test(p.name)
).map(p => p.name);

const groupIndex = config['proxy-groups'].findIndex(g => g.name === 'AI代理组');
if (groupIndex !== -1) {
config['proxy-groups'][groupIndex].proxies = aiNodes;
} else {
config['proxy-groups'].push({
name: 'AI代理组',
type: 'url-test',
proxies: aiNodes,
url: 'http://www.gstatic.com/generate_204',
interval: 500
});
}
return config;
}

/***
* 根据名称排除节点
*/
function removeNodeByName(config, regExp) {
config['proxy-groups'] = config['proxy-groups'].map(it => {
it.proxies = it.proxies.filter(name => !name.match(regExp));
return it;
});
return config;
}

/***
* 添加代理规则
*/
function addProxyRules(config) {
config.rules = myProxyRules.concat(config.rules);
return config;
}

/***
* 添加直连规则
*/
function addDirectRules(config) {
config.rules = myDirectRules.concat(config.rules);
return config;
}

/***
* 自定义代理规则
*/
const myProxyRules = [
"DOMAIN-SUFFIX,openai.com,AI代理组",
"DOMAIN-SUFFIX,anthropic.com,AI代理组",
"DOMAIN-KEYWORD,claude,AI代理组",
"DOMAIN-KEYWORD,chatgpt,AI代理组",
"DOMAIN-KEYWORD,generativelanguage,AI代理组",
"DOMAIN-KEYWORD,arcgis,AI代理组",
"DOMAIN-KEYWORD,google,AI代理组",
];

/***
* 自定义直连规则
*/
const myDirectRules = [

"DOMAIN-KEYWORD,pubmed,DIRECT",
"DOMAIN-KEYWORD,springer,DIRECT",
"DOMAIN-KEYWORD,ieee,DIRECT",
"DOMAIN-KEYWORD,elsevier,DIRECT",
"DOMAIN-KEYWORD,steam,DIRECT",
"DOMAIN-KEYWORD,clarivate,DIRECT",
"DOMAIN-KEYWORD,sciencedirect,DIRECT",
"DOMAIN-KEYWORD,webofscience,DIRECT",
"DOMAIN-KEYWORD,nature,DIRECT",
"DOMAIN-KEYWORD,tandfonline,DIRECT",
"DOMAIN-KEYWORD,taylorfrancis,DIRECT",
"DOMAIN-KEYWORD,cherrystudio,DIRECT",
"DOMAIN-KEYWORD,taylorandfrancis,DIRECT",
"DOMAIN-KEYWORD,elsevier.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,onlinelibrary.wiley.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,els-cdn.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,tuchong.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,dl.acm.org,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,acm-prod.disqus.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,readspeaker.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,webofknowledge.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,taylorfrancis.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,tandfonline.com,DIRECT", // 保持,即使它看起来像一个域名
"DOMAIN-KEYWORD,rp.tandfonline.com,DIRECT", // 保持,即使它看起来像一个域名

];