为什么 String.raw 可以处理双反斜杠,而常规转义不能?



匹配字符串中的双反斜杠需要两个转义反斜杠。但是在原生 JavaScript 函数中不匹配的事件

,如下所示:
const str = 'sj\sfsd'
str.match(/\\/g);                  /*null*/
str.indexOf('\\');                 /*-1*/
str.replace(/\\/, '')              /*'sjsfsd'*/   /*<--wrong characters replaced*/

String.raw有效:

const str = String.raw`sj\sfsd`
str.match(/\\/g);                  /*['\']*/
str.indexOf('\\');                 /*2*/
str.replace(String.raw`\`, '')      /*'sjsfsd'*/

关于这个话题也有类似的问题,但没有一个解释这种古怪背后的原因:

  • 在 javascript 中将双反斜杠替换为单个反斜杠
  • Javascript 用单反斜杠替换双反斜杠

这正是String.raw的用途:它不解释转义序列。反斜杠在字符串中具有特殊含义,因此您需要将其加倍才能获得一个实际的反斜杠。对于String.raw,(大多数)特殊字符失去了它们的特殊含义,所以两个反斜杠实际上是两个反斜杠。当您需要包含许多特殊字符的字符串并且不想过多地担心正确转义它们时,它就会精确地使用。

相关内容