C'est la vie

生きてる事が 時には辛くて

0%

利用parsers功能对Clash for Windows 配置文件进行预处理

背景

之前一直在用的机场在一次更新之后多了几个节点,节点名字是用来传递一些公告信息防止失联的,节点本身是用不了的,为了不影响正常使用,所以需要采用一些手段来把这些节点过滤掉。

本地图片

简要说明clash配置文件的结构

打开yaml配置文件,可以看见结构大致如下所示:

本地图片

第46行 proxies 列出来了所有的节点。

第322行 proxy-groups 列出来了所有的策略组,从图中可以看出,一共有4个策略组,其中第4个 Auto 是我一般用的。

第363行 可以看到Auto策略组中含有哪些节点,前三行就是三个无效的节点,如果把这三个节点从这个策略组中删掉,那之后再使用Auto策略组就不会选中这三个无效节点了。

方法及原理

根据Clash for Windows(简称cfw)官方文档

0.11.10版本更新后,支持使用 YAML 对下载后配置文件进行简单预处理

参考官方文档的例子,首先进入parsers编辑器

 1、进入 Settings 界面
 2、滚动至 Profiles 栏
 3、点击 Parsers 右边 Edit 打开编辑器
 或者直接在Profiles 界面中找一个配置文件然后点右键找到parsers项(必须要是根据URL下载的yaml配置文件,不能是直接拖进来的yaml文件)

编辑器内容结构如下:

1
2
3
4
5
6
7
parsers:
- url: https://example.com/profile.yaml #这里的网址可以填写机场提供的下载配置文件的那个URL,也可以根据正则表达式匹配
yaml:
commands:
- proxy-groups.3.proxies.0-
- proxy-groups.3.proxies.0-
- proxy-groups.3.proxies.0-

proxy-groups.3 表示定位到 proxy-groups里的 Auto 组(由于是从0开始计数的,所以3就代表第四项)。

同样道理proxy-groups.3.proxies.0 就代表定位到Auto 组的proxies的第一项,也就是第一个无效节点。

最后的-表示删掉proxies的第一个节点,重复三次,就可以删掉最开始的三个节点了。

上面的方法简单直接,但是只适用于无效节点在节点列表的开头这种情况,也可以采用正则表达式的写法来匹配,如下所示:

1
2
3
4
5
parsers:
- url: https://example.com/profile.yaml
yaml:
commands:
- proxy-groups.3.proxies=[]proxyNames|^[^\d].*

根据官方文档:

v0.13.7 版本更新后,支持 3 个内置值用于设置策略组节点,分别是[]proxyNames,[]groupNames和[]shuffledProxyNames,并支持使用正则过滤其中节点

关于正则表达式^[^\d].*(以下由ChatGPT生成)

1
2
3
4
5
6
7
8
9
10
11
正则表达式^[^\d].* 表示以任何非数字字符开头,后面跟着任何数量的任意字符。

具体来说,它由以下几个部分组成:

^:匹配行的开头位置。

[^\d]:匹配任何一个非数字字符,方括号表示匹配其中任何一个字符,^\d表示除了数字以外的任何字符。

.*:匹配任意数量的任意字符,.*表示任意字符出现0次或多次。

因此,正则表达式^[^\d].* 可以匹配以任何非数字字符开头的任意字符串。例如,它可以匹配"hello"、"world"、"abc123"等字符串,但不能匹配"123"、"1abc"等以数字开头的字符串。

所以刚才的写法就是向策略组添加所有节点,并按正则表达式^[^\d].*的模式匹配,这样就过滤掉了以数字开头的三个无效节点。

同样道理,也可以参考官方文档的写法,利用parsers对配置文件进行其他预处理,比如修改规则,修改节点等。

参考

clash官方说明文档

视频 使用CFW的parsers功能自动插入策略组