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

标签 javascript regex escaping backslash

匹配字符串中的双反斜杠需要两个转义反斜杠。但是在 native 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,(大多数)特殊字符失去了它们的特殊含义,因此两个反斜杠实际上是两个反斜杠。当您需要一个包含许多特殊字符的字符串并且不想担心过多地正确转义它们时,就会使用它。

关于javascript - 为什么 String.raw 可以处理双反斜杠但常规转义不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55781482/

相关文章:

javascript - URL 验证正则表达式 - URL 仅对 http ://有效

regex - 使用 sed 替换关联 bash 数组中的匹配值

windows - CALL 通过时百分号消失

javascript - 如何理解 `f(array[i], i, array)`源代码中的 `d3.min()`?

javascript - 如何从浏览器中删除cookie?

javascript - 尝试将数组拆分为字符数组时出现间歇性类型错误

python - 与 BeautifulSoup 一起逃离……

javascript - Node.js Hello World 不工作

JavaScript 电子邮件验证 - @ 之前的字符串变量

c++ - 如何阻止 QXmlStreamWriter 转义引号?