将反斜杠应用于变量(不是 String.raw)
Applying Backslash To A Variable (Not String.raw)
我想从包含 'n'
的变量 (char
) 中获取换行符 \n
我试过这个:
`\${char}`; // Not working, its 2 character not a newline character
'\' + char; // Obviously this will not work
是否存在某些东西,例如 String.applyBackslash()
?
没有这样的方法,没有。 :-) 有两种方法:
查找table(对象或Map
)映射n
到\n
等(没有那么多转义序列.)
eval
,这可能有点矫枉过正,但没关系 当且仅当 你充分控制输入,你知道它不会用于恶意代码注入。
#1 示例:
const mappings = Object.assign(Object.create(null), {
'"': '"',
"'": "'",
"\": "\",
b: "\b",
f: "\f",
n: "\n",
r: "\r",
t: "\t",
});
const stringToTreatLiterally = "Testing \n1\n2\n3";
console.log(JSON.stringify(
stringToTreatLiterally.replace(
/\(["'\bfnrt])/g,
(m, c) => `${mappings[c] || c}`
)
));
如果你想处理 \uNNNN
或 \u{NNNN}
,它们并没有那么复杂,但你必须捕获数字并使用 String.fromCharCode
或 [=18] =] 创建结果。
我想从包含 'n'
char
) 中获取换行符 \n
我试过这个:
`\${char}`; // Not working, its 2 character not a newline character
'\' + char; // Obviously this will not work
是否存在某些东西,例如 String.applyBackslash()
?
没有这样的方法,没有。 :-) 有两种方法:
查找table(对象或
Map
)映射n
到\n
等(没有那么多转义序列.)eval
,这可能有点矫枉过正,但没关系 当且仅当 你充分控制输入,你知道它不会用于恶意代码注入。
#1 示例:
const mappings = Object.assign(Object.create(null), {
'"': '"',
"'": "'",
"\": "\",
b: "\b",
f: "\f",
n: "\n",
r: "\r",
t: "\t",
});
const stringToTreatLiterally = "Testing \n1\n2\n3";
console.log(JSON.stringify(
stringToTreatLiterally.replace(
/\(["'\bfnrt])/g,
(m, c) => `${mappings[c] || c}`
)
));
如果你想处理 \uNNNN
或 \u{NNNN}
,它们并没有那么复杂,但你必须捕获数字并使用 String.fromCharCode
或 [=18] =] 创建结果。