String.raw 是 JavaScript 中用于创建原始字符串字面量的方法,避免反斜杠被转义,适用于 Windows 路径、正则表达式等场景;它作为标签函数保留模板中所有反斜杠字面意义,但插值部分仍会正常解析。

String.raw 是 JavaScript 中专门用于创建**原始字符串字面量**的方法,它能避免反斜杠()被解释为转义字符,特别适合处理正则表达式、Windows 路径、JSON 模板等含大量反斜杠的字符串。
为什么普通字符串会出问题?
在常规字符串中,
表示换行, 表示制表符,\ 才表示一个真正的反斜杠。如果你写:
实际会被解析成乱码(U、
、d 都是非法转义),运行时可能报错或行为异常。
String.raw 的基本用法
它是一个标签函数,语法为 String.raw`...`,其中模板字符串里的所有反斜杠都按字面意义保留:
-
String.raw`C:Users
amedocs` → 字符串值就是
"C:\Users\name\docs"(注意:控制台显示双反斜杠只是字符串内部表示,实际只含单个) -
String.raw`regex: d+.d*` → 得到
"regex: \d+\.\d*",可直接传给new RegExp() - 支持模板插值:String.raw`path: ${dir}ile.txt`,仅对静态部分保持原始性,插值部分仍正常求值
常见适用场景
以下情况强烈建议用 String.raw:
-
Windows 文件路径:避免手动写
\\,直接写String.raw`D:Projectsppconfig.json` -
正则表达式字面量:如匹配 IPv4 地址:
String.raw`(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)` -
多行正则或带注释的模式:配合
RegExp(..., 'x')(需引擎支持)或预处理时保留原始结构 - 生成代码/配置文本:比如拼接 Dockerfile 指令、SQL 片段,其中反斜杠需原样输出
注意事项
String.raw 不是万能的,要注意几点:
- 它只影响模板字符串中的字面量部分,变量插值里若含反斜杠,仍会被 JS 引擎提前解析(例如
let x = "a b"; String.raw`${x}`中的在插值前就已转为换行) - 不解决 Unicode 转义(如
u{1F600}),那些仍会被识别;但\u{1F600}就会保留为字面两个字符 - 如果只是单个字符串且不含插值,也可用双反斜杠替代,但可读性差;String.raw 更清晰、更安全

















