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

JavaScript中如何仅转义字符串里的\u序列而保留其他转义符?

如何仅转义字符串中的控制字符(保留\f、\n等特定转义序列)?

问题描述

我从接口获取了如下字符串:

"���%<some-random-textcdtoolHxxx1-34e3-4069-b97c-xxxxxxxxxxx
"

需要遍历该字符串,仅将其中的Unicode控制字符转换为\uXXXX格式的转义序列,得到的结果应为:

"\u0000\u0000\u0000\u001A%<some-random-textcdtoolHxxx1-34e3-4069-b97c-xxxxxxxxxxx\u001E
"

注意:\f(换页符)和\n(换行符)不需要被转义。此前尝试正则表达式会错误转义\f、\n,而String.raw仅对字符串字面量有效,无法处理接口返回的字符串变量,请问该如何实现需求?

解决方案

实现思路

核心逻辑是逐个遍历字符串字符,精准判断需要转义的范围:

  1. 明确不需要转义的字符:\n(ASCII 10)、\f(ASCII 12),以及所有可打印ASCII字符(码值32~126)。
  2. 对其余控制字符,转换为\uXXXX格式的4位十六进制转义序列。

代码实现

function escapeOnlyControlChars(str) {
  let result = '';
  for (const char of str) {
    const charCode = char.charCodeAt(0);
    // 跳过无需转义的字符:换行、换页、可打印ASCII字符
    if (charCode === 10 || charCode === 12 || (charCode >= 32 && charCode <= 126)) {
      result += char;
    } else {
      // 转换为\uXXXX格式,补前导零确保4位长度
      result += `\\u${charCode.toString(16).padStart(4, '0')}`;
    }
  }
  // 给结果添加外层双引号,匹配示例输出格式
  return `"${result}"`;
}

// 测试示例
const input = "���%<some-random-textcdtoolHxxx1-34e3-4069-b97c-xxxxxxxxxxx\n";
const output = escapeOnlyControlChars(input);
console.log(output);

代码说明

  • 遍历字符串每个字符,获取其ASCII码值进行判断。
  • 直接保留无需转义的字符,避免误转\f和\n。
  • 对控制字符统一处理为标准的\uXXXX转义格式,确保输出符合要求。
  • 最终给结果包裹双引号,与示例输出的格式完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:54:54