1 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
幾個(gè)問(wèn)題:
您有一個(gè)“八進(jìn)制值”,但僅在
parseInt
. 您需要使用 base 8 來(lái)解析八進(jìn)制數(shù)。您的輸入字符串中沒(méi)有反斜杠。
"\3"
與 完全相同"3"
,因?yàn)槟鷮?shí)際上是在轉(zhuǎn)義“3”(這不是必需的)。如果您想要文字反斜杠,則需要轉(zhuǎn)義反斜杠:"\\"
。盡管您創(chuàng)建了用于匹配輸入中的八進(jìn)制數(shù)的正則表達(dá)式 (as
r3
),但您從不使用該正則表達(dá)式。
其他備注:
當(dāng)輸入?yún)?shù)為空時(shí),您返回一個(gè)字符串,但在另一種情況下,您的函數(shù)不返回任何內(nèi)容。它只是輸出它。您應(yīng)該返回字符串。
如果參數(shù)是
undefined
then== null
也將是true
,因此不需要條件中的||
表達(dá)式if
。不要使用
document.write
.innerHTML
分配給DOM 元素的屬性幾乎總是更好。obj1
當(dāng)實(shí)際上期望它具有字符串?dāng)?shù)據(jù)類型時(shí),不要命名您的變量。
function decodeUnicodeChar(str) {
if (str == null) return ""; // no need extra test on undefined
var r = /\\u([\d\w]{4})/gi;
var r3 = /\\([\d\w]{3})/gi;
str = str.replace(r, (match, grp) => String.fromCharCode(parseInt(grp, 16)))
.replace(r3, (match, grp) => String.fromCharCode(parseInt(grp, 8)))
.replace(/\n/g, "<br>");
return decodeURIComponent(str); // return it
}
console.log(decodeUnicodeChar("Hello \\361o")); // escape backslash
最后,我建議使用 JSON 格式的字符串,它允許對(duì) unicode 字符進(jìn)行編碼。然后你只需要打電話JSON.parse
。
添加回答
舉報(bào)