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

Why can String.raw handle double backslashes but regular escaping can't?

匹配字符串中的双反斜杠需要两个转义反斜杠。但是在本机 JavaScript 函数中不匹配的事件如下所示:

const str = 'sj\sf\sd'

str.match(/\\/g);                  /*null*/
str.indexOf('\\');                 /*-1*/
str.replace(/\\/, '')              /*'sj\sfsd'*/   /*<--wrong characters replaced*/

String.raw 有效:

const str = String.raw`sj\sf\sd`

str.match(/\\/g);                  /*['\']*/
str.indexOf('\\');                 /*2*/
str.replace(String.raw`\`, '')      /*'sjsf\sd'*/

有人问过关于此主题的类似问题,但 none 解释了这种怪癖背后的原因:

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