1 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
您的某些字符串filterDecode作為正則表達(dá)式具有特殊含義。將字符串轉(zhuǎn)換為正則表達(dá)式時(shí),需要將每個(gè)字符都包裹起來,[]以便按字面意思進(jìn)行匹配。
/創(chuàng)建regexDe. _
不需要for(b...)循環(huán)。在調(diào)用中使用正則表達(dá)式,replace()它將立即執(zhí)行所有替換,因?yàn)樗術(shù)標(biāo)志。
將包含的編碼字符串放在%數(shù)組的開頭。否則,當(dāng)您對類似=as的內(nèi)容進(jìn)行編碼時(shí)%3D,外循環(huán)的后續(xù)迭代會(huì)將其重新編碼為%253D。如果它在原始字符串中,而不是中間步驟,您只想對其進(jìn)行編碼。
var Url = {
filterDecode: ["%252F", "%253A", "%253D", "%253F", "%252B", "%2B", "%3A", "%3D", "%3F", "%2F", "%26"],
filterEncode: ["%2F", "%3A", "%3D", "%3F", "%2B", "+", ":", "=", "?", "/", "&"],
strToRe: function(str) {
let reStr = str.split("").map(c => '[' + c + ']').join('');
return new RegExp(reStr, "g");
},
decode: function(decodeText) {
let a;
let filterEncode = Url.filterEncode;
let filterDecode = Url.filterDecode;
for (a = 0; a < filterDecode.length; a++) {
decodeText = decodeText.replace(Url.strToRe(filterDecode[a]), filterEncode[a]);
}
return decodeText;
},
encode: function(encodeText) {
let a, b;
let filterEncode = Url.filterEncode;
let filterDecode = Url.filterDecode;
for (a = 0; a < filterEncode.length; a++) {
encodeText = encodeText.replace(Url.strToRe(filterEncode[a]), filterDecode[a]);
}
return encodeText;
}
}
console.log(Url.encode("="));
console.log(Url.decode("%3D"));
console.log(Url.encode("%3F"));
console.log(Url.decode("%253F"));
console.log(Url.encode("%3F ="));
console.log(Url.decode("%253F %3D"));
添加回答
舉報(bào)