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

时间:2019-04-21 09:24:37

标签: javascript regex escaping backslash

在字符串中匹配双反斜杠需要两个转义反斜杠。但是,与本机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'*/

有人问过与此主题类似的问题,但没有人解释这种古怪的原因:

1 个答案:

答案 0 :(得分:2)

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