【问题标题】:How to prevent the character '\' from escaping ES6 template strings?如何防止字符 '\' 转义 ES6 模板字符串?
【发布时间】:2015-09-14 14:02:05
【问题描述】:

在 ES6 中,我可以这样做:

let myString = `My var: ${myVar}`;

这将自动将${myVar} 替换为myVar 的实际值。完美。

但是如果我有这样的东西呢?

let myString = `My var: \${myVar}`;

字符\ 正在转义${} 构造。它只是成为一个常规字符串。

在这种情况下我怎样才能让\不逃跑

【问题讨论】:

  • 你为什么有一个 `\` 字符?
  • 所以你应该修复正则表达式。
  • 我动态构建的正则表达式需要反斜杠。
  • 我很困惑。您想在最终输出中替换 myVar 吗?如果是这样,你为什么要在${ 之间加上斜线?如果没有,为什么要使用模板字符串?
  • @andrerpena:请向我们展示您的实际用例。似乎您可能想要"\\${myVar}" 或类似的东西,但如果您不显示您的实际代码,我们就无法判断。

标签: javascript ecmascript-6 template-strings


【解决方案1】:

如果您想在模板字符串中使用文字反斜杠,则需要对其进行转义:

let myVar = "test";
let myString = `My var: \\${myVar}`; // "My var: \test"

【讨论】:

  • 感谢和抱歉错字。我编辑了问题。
  • 刚刚使用 Node.js 尝试了上述操作 - 版本 v4.3.1 和 v.7.5.0 并且上面建议的答案不起作用。输出是'我的变量:\\test'
  • 似乎与 Node REPL 相关 - 引发了 Node.js 的问题 - github.com/nodejs/node/issues/11604
  • @arcseldon 是的,repl 不输出字符串,而是输出字符串文字。使用console.log(myString) 获取打印的值
【解决方案2】:

尝试使用String.raw

const name = String.raw`
  ____                 _ 
 |  _ \               (_)
 | |_) | ___ _ __ __ _ _ 
 |  _ < / _ | '__/ _' | |
 | |_) |  __| | | (_| | |
 |____/ \___|_|  \__, |_|
                  __/ |  
                 |___/   
`

【讨论】:

  • 请注意,您的原始示例不起作用,因为您使用了反引号。您仍然需要使用 String.raw 转义两个字符——反引号和圆号。
  • 嗯...实际上你根本不能使用反引号,因为String.raw`\`` !== '`'
猜你喜欢
  • 2016-10-26
  • 2018-03-04
  • 2011-03-18
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多