bra*_*ter 10 escaping node.js read-eval-print-loop ecmascript-6 template-literals
我正在努力获取 ES6 模板文字来生成单个反斜杠及其结果。
> `\s`
's'
> `\\s`
'\\s'
> `\\\s`
'\\s'
> `\\\\s`
'\\\\s'
> `\u005Cs`
'\\s'
Run Code Online (Sandbox Code Playgroud)
通过检查 Node REPL 上的值(而不是使用 打印它console.log
) ,使用 Node 8.9.1 和 10.0.0 进行测试
如果我答对了你的问题,怎么样\\
?
我尝试使用$ node -i
并运行
console.log(`\\`);
Run Code Online (Sandbox Code Playgroud)
从而成功输出反斜杠。请记住,输出也可能被转义,因此知道您成功获得反斜杠的唯一方法是获取字符代码:
const myBackslash = `\\`;
console.log(myBackslash.charCodeAt(0)); // 92
Run Code Online (Sandbox Code Playgroud)
为了确保您实际上没有得到\\
(即双反斜杠),请检查长度:
console.log(myBackslash.length); // 1
Run Code Online (Sandbox Code Playgroud)
未知字符串转义序列在 JavaScript 普通字符串和模板字符串文字中丢失转义反斜杠是一个已知问题:
当字符串文字或正则表达式文字中的字符前面有反斜杠时,它将被解释为转义序列的一部分。例如,
\n
字符串文字中的转义序列对应于单个换行符,而不是\
和n
字符。但是,并非所有字符在转义序列中使用时都会改变含义。在这种情况下,反斜杠只是使该字符看起来有其他含义,而反斜杠实际上没有任何作用。例如,\k
字符串文字中的转义序列仅表示k
. 这种多余的转义序列通常是良性的,并且不会改变程序的行为。
在常规字符串文字中,需要加倍反斜杠才能引入文字反斜杠字符:
console.log("\s \\s"); // => s \s
console.log('\s \\s'); // => s \s
console.log(`\s \\s`); // => s \s
Run Code Online (Sandbox Code Playgroud)
有一个更好的想法:使用String.raw
:
静态方法是模板文字
String.raw()
的标记函数。这类似于Python 中的前缀或 C# 中字符串文字的前缀。(但它并不相同;请参阅本期中的解释。)它用于获取模板字符串的原始字符串形式,即处理替换(例如),但不处理转义(例如)。r
@
${foo}
\n
因此,您可以简单地使用String.raw`\s`
定义\s
文本:
console.log(String.raw`s \s \\s`); // => s \s \\s
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5083 次 |
最近记录: |