匹配字符串中的双反斜杠需要两个转义反斜杠。但是在本机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'*/
关于这个话题也有类似的问题,但没有人解释这个怪癖背后的原因:
这正是String.raw
的用途:它不解释转义序列。反斜杠在字符串中具有特殊含义,因此您需要将其加倍才能得到一个实际的反斜杠。使用String.raw
,(大多数)特殊字符失去了它们的特殊含义,因此两个反斜杠实际上是两个反斜杠。它恰好用于需要带有许多特殊字符的字符串时,并且不想担心过多地转义它们。