如何避免 Javascript 模板字符串插值中的控制字符解释?
How can I avoid control character interpretation in Javascript template string interpolation?
我有一个包含控制字符(换行符)的字符串变量。我想输出该变量,但将控制字符作为其文字表示而不进行解释:
console.log(`Using "${nl}" as newline`)
其中 nl
变量可能包含 \n
、\r
或 \r\n
之一。
这个输出当然是
Using
as newline
但应该是例如
Using "\r\n" as newline
我想我需要以某种方式构造这样的字符串
console.log('Using "\r\n" as newline')
所以我一直在尝试通过使用 nl.replace()
添加另一个反斜杠来转义 nl
中的反斜杠,但这似乎不起作用,因为 nl
变量没有实际上包含任何反斜杠字符。
有没有办法通用地执行此操作,即无需为 \n
、\r
和 \r\n
明确编码?
您可以删除双引号,并使用 JSON.stringify
,它也会生成这些引号,并对换行符进行编码(以及更多,例如 TAB、BS、FF,并转义双引号和反斜杠):
let nl = "\r\n";
console.log(`Using ${JSON.stringify(nl)} as newline`);
// Or with a newline in a template literal:
nl = `
`;
console.log(`Using ${JSON.stringify(nl)} as newline`);
我有一个包含控制字符(换行符)的字符串变量。我想输出该变量,但将控制字符作为其文字表示而不进行解释:
console.log(`Using "${nl}" as newline`)
其中 nl
变量可能包含 \n
、\r
或 \r\n
之一。
这个输出当然是
Using
as newline
但应该是例如
Using "\r\n" as newline
我想我需要以某种方式构造这样的字符串
console.log('Using "\r\n" as newline')
所以我一直在尝试通过使用 nl.replace()
添加另一个反斜杠来转义 nl
中的反斜杠,但这似乎不起作用,因为 nl
变量没有实际上包含任何反斜杠字符。
有没有办法通用地执行此操作,即无需为 \n
、\r
和 \r\n
明确编码?
您可以删除双引号,并使用 JSON.stringify
,它也会生成这些引号,并对换行符进行编码(以及更多,例如 TAB、BS、FF,并转义双引号和反斜杠):
let nl = "\r\n";
console.log(`Using ${JSON.stringify(nl)} as newline`);
// Or with a newline in a template literal:
nl = `
`;
console.log(`Using ${JSON.stringify(nl)} as newline`);