我很难获得一个ES6模板文字以产生一个反斜杠。
> `\s`
's'
> `\\s`
'\\s'
> `\\\s`
'\\s'
> `\\\\s`
'\\\\s'
> `\u005Cs`
'\\s'
通过检查节点REPL上的值(而不是使用console.log
打印它)来测试节点8.9.1和10.0.0
答案 0 :(得分:2)
如果我的问题是对的,\\
怎么样?
我尝试使用$ node -i
并运行
console.log(`\\`);
成功输出反斜杠。请记住,输出也可能被转义,因此了解您成功获得反斜杠的唯一方法是获取字符代码:
const myBackslash = `\\`;
console.log(myBackslash.charCodeAt(0)); // 92
为确保您实际上没有获得\\
(即双反斜杠),请检查长度:
console.log(myBackslash.length); // 1
答案 1 :(得分:0)
这是一个已知的问题,unknown string escape sequences在JavaScript常规和模板字符串文字中丢失了转义的反斜杠:
当字符串文字或正则表达式文字中的字符为 以反斜杠开头,它被解释为转义的一部分 顺序。例如,字符串文字中的转义序列
\n
对应一个换行符,而不是\
和n
字符。但是,并非所有字符都会在 转义序列。在这种情况下,反斜杠只是使角色 似乎意味着其他,反斜杠实际上没有 影响。例如,字符串文字中的转义序列\k
仅 表示k
。这种多余的转义序列通常是良性的,并且 不会改变程序的行为。
在常规字符串文字中,需要将反斜杠加倍才能引入文字反斜杠char:
console.log("\s \\s"); // => s \s
console.log('\s \\s'); // => s \s
console.log(`\s \\s`); // => s \s
有一个更好的主意:使用 String.raw
:
静态
String.raw()
方法是template literals的标记功能。这类似于Python中的r
前缀或@
C#中的前缀,用于字符串文字。 (但这不是相同;请参见 this issue中的说明。)它用于获取原始字符串形式 模板字符串,即替换(例如${foo}
)是 已处理,但转义符(例如\n
)未被处理。
因此,您可以简单地使用String.raw`\s`
来定义\s
文本:
console.log(String.raw`s \s \\s`); // => s \s \\s