regexout 参数

This commit is contained in:
Shawn
2021-09-10 21:06:03 +08:00
parent acb90ca3c2
commit f9231d7f68
2 changed files with 24 additions and 9 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -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&regex=(?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()