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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么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'*/

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

答案

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

以上是关于为什么String.raw可以处理双反斜杠但是常规转义不能?的主要内容,如果未能解决你的问题,请参考以下文章

为啥单反斜杠变成双反斜杠

双反斜杠不起作用?

为啥某些带有双反斜杠的路径抛出找不到路径异常的一部分?

目标 C:用单反斜杠替换双反斜杠

如何将带有双反斜杠的字符串转换为单反斜杠

将反斜杠更改为双反斜杠