You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用标准JavaScript代码重实现String.raw()?解析转义难题

如何用标准JavaScript重实现String.raw()?

你说得没错,自定义模板字面量标签函数直接拿第一个参数的字符串数组的话,拿到的是已经转义后的内容,这时候靠反转义来还原原始字符串根本不可靠——比如换行符到底是来自代码里的\n转义,还是直接敲的回车,转义后结果完全一样,没法区分。

但其实ECMAScript给标签函数的第一个参数提供了一个**.raw属性**,这个属性里保存的就是未经过转义的原始字符串片段数组,这正是重实现String.raw()的关键。

重实现代码示例

const myStringRaw = (strings, ...values) => {
  let output = '';
  // 遍历原始字符串片段和对应的插值变量
  for (let i = 0; i < strings.raw.length; i++) {
    // 先拼接当前原始字符串片段
    output += strings.raw[i];
    // 如果还有插值变量,就拼接上(最后一个片段后没有变量)
    if (i < values.length) {
      output += values[i];
    }
  }
  return output;
};

验证效果

  • 调用myStringRawa\nb``,会返回字符串'a\\nb'(也就是代码里写的原始a\nb,保留反斜杠和n)
  • 调用myStringRawa
    b``,会返回字符串'a\nb'(实际包含换行符,和直接输入的回车对应)

这个实现完全遵循了String.raw()的语义,因为它直接使用了引擎提供的原始字符串信息,不需要做任何不可靠的转义反转操作。

内容的提问来源于stack exchange,提问作者timkay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:02:20