(subs)
| 916 | |
| 917 | //url-regex 转换成 Quantumult X 重写 |
| 918 | function URX2QX(subs) { |
| 919 | var nrw = [] |
| 920 | var rw = "" |
| 921 | subs = subs.split("\n") |
| 922 | //$notify("URX") |
| 923 | var NoteK = ["//", "#", ";"]; //排除注释项 |
| 924 | for (var i = 0; i < subs.length; i++) { |
| 925 | const notecheck = (item) => subs[i].indexOf(item) == 0 |
| 926 | if (!NoteK.some(notecheck)) { |
| 927 | if (subs[i].slice(0, 9) == "URL-REGEX") { // regex 类型 |
| 928 | if (subs[i].indexOf("REJECT") != -1 || subs[i].split(",").length == 2 ) { // 仅处理 reject 类型,或者无指定策略类型 |
| 929 | if (subs[i].replace(/ /g, "").split(",REJECT")[0].split("GEX,")[1].slice(0,1) != "*") { // 部分 * 开头的不支持 url-regex形式 |
| 930 | rw = subs[i].replace(/ /g, "").split(",REJECT")[0].split("GEX,")[1] + " url " + "reject-200" |
| 931 | nrw.push(rw) |
| 932 | } |
| 933 | } |
| 934 | } else if (subs[i].indexOf("data=") != -1 && subs.indexOf("[Map Local]") != -1){ // Map Local 类型 |
| 935 | // 取subs[i]的文件名 |
| 936 | let fn = subs[i].match(/data=.+\/(.+)"/) ? subs[i].match(/data=.+\/(.+)"/)[1] : null |
| 937 | if (!/header=".*content-type/i.test(subs[i]) && /blank/i.test(fn)) { |
| 938 | rw = Mock2QXReject(subs[i], fn) |
| 939 | } else { |
| 940 | rw = subs[i].replace(/ /g, "").split("data=")[0].replace(/\"/g,"") + " url echo-response text/html echo-response " + subs[i].split("data=")[1].split(" ")[0].replace(/\"/g,"").replace(/ /g, "")//"reject-dict" |
| 941 | if (subs[i].indexOf("header=")!=-1) { |
| 942 | if (subs[i].indexOf("Content-Type:") !=-1) { |
| 943 | let tpe = subs[i].split("header=")[1].split("Content-Type:")[1].split(",")[0].replace(/\"/g,"") |
| 944 | rw = rw.replace(/text\/html/g,tpe) |
| 945 | } |
| 946 | } |
| 947 | } |
| 948 | nrw.push(rw) |
| 949 | } |
| 950 | } |
| 951 | } |
| 952 | //$notify("URX","",nrw) |
| 953 | return nrw |
| 954 | } |
| 955 | |
| 956 | //script&rewrite 转换成 Quantumult X |
| 957 | function SCP2QX(subs) { |
no test coverage detected