mirror of
https://github.com/KOP-XIAO/QuantumultX.git
synced 2026-01-25 17:15:09 +00:00
regexout 参数
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
☑️ 资源解析器 ©𝐒𝐡𝐚𝐰𝐧 ⟦2021-09-08 17:45⟧
|
||||
☑️ 资源解析器 ©𝐒𝐡𝐚𝐰𝐧 ⟦2021-09-10 20:45⟧
|
||||
----------------------------------------------------------
|
||||
🛠 发现 𝐁𝐔𝐆 请反馈: @ShawnKOP_bot
|
||||
⛳️ 关注 🆃🅶 相关频道: https://t.me/QuanX_API
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
🤖 主要功能:
|
||||
❶ 将其它格式的⟦服务器订阅⟧解析成 𝐐𝐮𝐚𝐧𝐭𝐮𝐦𝐮𝐥𝐭 𝐗 格式
|
||||
☑︎ 支持 𝗩𝗺𝗲𝘀𝘀/𝗦𝗦(𝗥/𝗗)/𝗛𝗧𝗧𝗣(𝗦)/𝗧𝗿𝗼𝗷𝗮𝗻/𝗤𝘂𝗮𝗻𝘁𝘂𝗺𝘂𝗹𝘁(𝗫)/𝗦𝘂𝗿𝗴𝗲/𝐂𝐥𝐚𝐬𝐡/𝐒𝐡𝐚𝐝𝐨𝐰𝐫𝐨𝐜𝐤𝐞𝐭/𝐋𝐨𝐨𝐧 格式
|
||||
☑︎ 支持 𝐕2𝐫𝐚𝐲𝐍/𝗦𝗦(𝗥/𝗗)/𝗛𝗧𝗧𝗣(𝗦)/𝗧𝗿𝗼𝗷𝗮𝗻/𝗤𝘂𝗮𝗻𝘁𝘂𝗺𝘂𝗹𝘁(𝗫)/𝗦𝘂𝗿𝗴𝗲/𝐂𝐥𝐚𝐬𝐡/𝐒𝐡𝐚𝐝𝐨𝐰𝐫𝐨𝐜𝐤𝐞𝐭/𝐋𝐨𝐨𝐧 格式
|
||||
☑︎ 提供说明 1⃣️ 中的可选个性化参数(筛选、重命名 等)
|
||||
❷ 𝗿𝗲𝘄𝗿𝗶𝘁𝗲(重写) & 𝗳𝗶𝗹𝘁𝗲𝗿(分流) 的 转换 & 筛选
|
||||
☑︎ 用于禁用/修改远程引用中某(几)项 𝗿𝗲𝘄𝗿𝗶𝘁𝗲/𝗵𝗼𝘀𝘁𝗻𝗮𝗺𝗲/𝗳𝗶𝗹𝘁𝗲𝗿
|
||||
@@ -24,9 +24,9 @@
|
||||
⦿ emoji=1(国行设备用2)/-1, 添加/删除节点名内地区旗帜;
|
||||
⦿ udp=1/-1, tfo=1/-1, 分别强制开启(关闭) 𝐮𝐝𝐩-𝐫𝐞𝐥𝐚𝐲/𝐟𝐚𝐬𝐭-𝐨𝐩𝐞𝐧;
|
||||
⦿ tls13=1, cert=1, 分别开启 𝐭𝐥𝐬1.3 及 𝐭𝐥𝐬 证书验证(默认关闭);
|
||||
⦿ in, out, regex 分别为 保留、删除、正则筛选 节点;
|
||||
⦿ in, out, regex, regexout 分别为 保留、删除、正则保留、正则删除 节点;
|
||||
❖ in, out 中多参数(逻辑"或")用 "+", 逻辑"与"用 "." 表示;
|
||||
❖ in/out/regex 均对节点的完整信息进行匹配(类型、端口、加密等);
|
||||
❖ in/out/regex/regout 均对节点的完整信息进行匹配(类型、端口、加密等);
|
||||
❖ 示范: "in=香港.0\.2倍率+台湾&out=香港%20BGP®ex=(?i)iplc"
|
||||
⦿ rename 重命名, "旧名@新名", "前缀@", "@后缀", 用 "+" 连接多个参数;
|
||||
❖ 删除字段: "字段1.字段2☠️", 想删除 "." 时用 "\." 替代
|
||||
@@ -62,7 +62,7 @@
|
||||
⦿ inhn, outhn, “保留/删除”主机名(𝒉𝒐𝒔𝒕𝒏𝒂𝒎𝒆);
|
||||
❖ 示范: 禁用 "淘宝比价" 及 "weibo" 的 js 同主机名
|
||||
𝐡𝐭𝐭𝐩𝐬://𝐦𝐲𝐥𝐢𝐬𝐭#𝒐𝒖𝒕=tb_price.js+wb_ad.js&outhn=weibo
|
||||
⦿ regex, 正则筛选, 请自行折腾正则表达式;
|
||||
⦿ regex/regout, 正则保留/删除, 请自行折腾正则表达式;
|
||||
❖ 可与 in(hn)/out(hn) 一起使用,in(hn)/out(hn) 会优先执行;
|
||||
❖ 对 𝒉𝒐𝒔𝒕𝒏𝒂𝒎𝒆 & 𝐫𝐞𝐰𝐫𝐢𝐭𝐞/𝐟𝐢𝐥𝐭𝐞𝐫 同时生效(⚠️ 慎用)
|
||||
⦿ policy 参数, 用于直接指定策略组,或为 𝐒𝐮𝐫𝐠𝐞 类型 𝗿𝘂𝗹𝗲-𝘀𝗲𝘁 生成策略组(默认"𝐒𝐡𝐚𝐰𝐧"策略组);
|
||||
@@ -134,6 +134,7 @@ var Pin0 = mark0 && para1.indexOf("in=") != -1 ? (para1.split("in=")[1].split("&
|
||||
var Pout0 = mark0 && para1.indexOf("out=") != -1 ? (para1.split("out=")[1].split("&")[0].split("+")).map(decodeURIComponent) : null;
|
||||
var Psfilter = mark0 && para1.indexOf("sfilter=") != -1 ? Base64.decode(para1.split("sfilter=")[1].split("&")[0]) : null; // script filter
|
||||
var Preg = mark0 && para1.indexOf("regex=") != -1 ? decodeURIComponent(para1.split("regex=")[1].split("&")[0]).replace(/\,/g,",") : null; //server正则过滤参数
|
||||
var Pregout = mark0 && para1.indexOf("regout=") != -1 ? decodeURIComponent(para1.split("regout=")[1].split("&")[0]).replace(/\,/g,",") : null; //server正则删除参数
|
||||
var Pregdel = mark0 && para1.indexOf("delreg=") != -1 ? decodeURIComponent(para1.split("delreg=")[1].split("&")[0]).replace(/\,/g,",") : null; // 正则删除参数
|
||||
var Phin0 = mark0 && para1.indexOf("inhn=") != -1 ? (para1.split("inhn=")[1].split("&")[0].split("+")).map(decodeURIComponent) : null; //hostname
|
||||
var Phout0 = mark0 && para1.indexOf("outhn=") != -1 ? (para1.split("outhn=")[1].split("&")[0].split("+")).map(decodeURIComponent) : null; //hostname
|
||||
@@ -249,13 +250,13 @@ function ResourceParse() {
|
||||
} else if (type0 == "sgmodule") { // surge module 模块/含 url-regex 的 rule-set
|
||||
flag = 2
|
||||
total = SGMD2QX(content0) // 转换
|
||||
total = Rewrite_Filter(total, Pin0, Pout0,Preg); // 筛选过滤
|
||||
total = Rewrite_Filter(total, Pin0, Pout0,Preg,Pregout); // 筛选过滤
|
||||
if (Preplace) { total = ReplaceReg(total, Preplace) }
|
||||
if (Pcdn) {total = CDN(total)
|
||||
} else { total = total.join("\n")}
|
||||
} else if (type0 == "rewrite") { // rewrite 类型
|
||||
flag = 2;
|
||||
total = Rewrite_Filter(isQuanXRewrite(content0.split("\n")), Pin0, Pout0,Preg);
|
||||
total = Rewrite_Filter(isQuanXRewrite(content0.split("\n")), Pin0, Pout0,Preg,Pregout);
|
||||
if (Preplace) { total = ReplaceReg(total, Preplace) }
|
||||
if (Pcdn) {total = CDN(total)
|
||||
} else {total = total.join("\n")}
|
||||
@@ -264,6 +265,7 @@ function ResourceParse() {
|
||||
total = Rule_Handle(content0.split("\n"), Pout0, Pin0).filter(Boolean);
|
||||
if (Preg && total.length!=0) { // 正则筛选规则 filter
|
||||
total = total.map(Regex).filter(Boolean)
|
||||
total = total.map(RegexOut).filter(Boolean)
|
||||
RegCheck(total, "分流引用", Preg)}
|
||||
if (Preplace) { total = ReplaceReg(total, Preplace) }
|
||||
if (Ppolicyset) {total = policy_sets(total, Ppolicyset)}
|
||||
@@ -285,6 +287,8 @@ function ResourceParse() {
|
||||
if (Pin0 || Pout0) { total = Filter(total, Pin0, Pout0) } // in & out
|
||||
if (Preg) { total = total.map(Regex).filter(Boolean) // regex
|
||||
RegCheck(total, "节点订阅", Preg)}
|
||||
if (Pregout) { total = total.map(RegexOut).filter(Boolean) // regex
|
||||
RegCheck(total, "节点订阅", Preg)}
|
||||
if (Psfilter) { total = FilterScript(total, Psfilter) }
|
||||
if (Prrname) {
|
||||
Prn = Prrname;
|
||||
@@ -783,7 +787,7 @@ function SGMD2QX(subs) {
|
||||
}
|
||||
|
||||
//Rewrite过滤,使用+连接多个关键词(逻辑"或"):in 为保留,out 为排除
|
||||
function Rewrite_Filter(subs, Pin, Pout,Preg) {
|
||||
function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) {
|
||||
var Nlist = [];
|
||||
var noteK = ["//", "#", ";"];
|
||||
var hnc = 0;
|
||||
@@ -797,7 +801,7 @@ function Rewrite_Filter(subs, Pin, Pout,Preg) {
|
||||
if (noteK.some(notecheck)) { // 注释项跳过
|
||||
continue;
|
||||
} else if (hnc == 0 && subii.indexOf("hostname=") == 0) { //hostname 部分
|
||||
hostname = (Phin0 || Phout0 || Preg) ? HostNamecheck(subi, Phin0, Phout0) : subi;//hostname 部分
|
||||
hostname = (Phin0 || Phout0 || Preg || Pregout) ? HostNamecheck(subi, Phin0, Phout0) : subi;//hostname 部分
|
||||
} else if (subii.indexOf("hostname=") != 0) { //rewrite 部分
|
||||
var inflag = Rcheck(subi, Pin);
|
||||
var outflag = Rcheck(subi, Pout);
|
||||
@@ -823,6 +827,8 @@ function Rewrite_Filter(subs, Pin, Pout,Preg) {
|
||||
if (Nlist.length == 0) { $notify("🤖 " + "重写引用 ➟ " + "⟦" + subtag + "⟧", "⛔️ 筛选参数: " + pfi + pfo, "⚠️ 筛选后剩余rewrite规则数为 0️⃣ 条, 请检查参数及原始链接", nan_link) }
|
||||
if(Preg){ Nlist = Nlist.map(Regex).filter(Boolean) // regex to filter rewrites
|
||||
RegCheck(Nlist, "重写引用", Preg) }
|
||||
if(Pregout){ Nlist = Nlist.map(RegexOut).filter(Boolean) // regex to delete rewrites
|
||||
RegCheck(Nlist, "重写引用", Preg) }
|
||||
if (hostname != "") { Nlist.push(hostname) }
|
||||
Nlist =Phide ==1? Nlist : [...dwrite,...Nlist]
|
||||
return Nlist
|
||||
@@ -1363,6 +1369,15 @@ function Regex(content) {
|
||||
}
|
||||
}
|
||||
|
||||
//正则删除, 完整内容匹配
|
||||
function RegexOut(content) {
|
||||
var Preg0 = RegExp(Pregout, "i")
|
||||
cnt = content //.split("tag=")[1]
|
||||
if (!Preg0.test(cnt)) {
|
||||
return content
|
||||
}
|
||||
}
|
||||
|
||||
// 判断节点过滤的函数
|
||||
function Scheck(content, param) {
|
||||
name = content.split("tag=")[1].toUpperCase()
|
||||
|
||||
Reference in New Issue
Block a user