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

使用split()处理数组时无法去除单引号的问题求助

解决从远程JS文件提取JOURNAL数组的问题

问题分析

你的代码目前存在几个核心问题:

  • 硬编码slice(16,6786)截取内容,一旦目标文件更新,截取范围就会失效
  • 处理后得到的是字符串形式的对象,控制台打印数组时用单引号包裹字符串元素,本质并非真正的JS对象数组
  • 手动处理空格、换行的方式容易引入格式问题,比如每个元素末尾残留的逗号

正确解决方案

直接提取目标文件中的JOURNAL数组内容,通过正则匹配+JSON解析的方式转换成可用的JS对象数组,代码如下:

const fetchJournal = async () => {
  try {
    const response = await fetch("https://eloquentjavascript.net/code/journal.js");
    const text = await response.text();
    // 匹配并提取JOURNAL数组的完整内容
    const journalMatch = text.match(/const JOURNAL = ([\s\S]+?);/);
    if (!journalMatch) throw new Error("未找到目标JOURNAL数组");
    
    let journalStr = journalMatch[1];
    // 移除JSON不允许的末尾逗号(原数组每个对象后都有逗号)
    journalStr = journalStr.replace(/,\s*([\]}])/g, '$1');
    
    // 解析为真正的JS对象数组
    const JOURNAL = JSON.parse(journalStr);
    return JOURNAL;
  } catch (error) {
    console.error(error);
  }
};

// 调用使用
const JOURNAL = await fetchJournal();
console.log(JOURNAL);
console.log(JOURNAL[0].events); // 可直接访问对象属性

方案说明

  1. 正则提取数组:通过/const JOURNAL = ([\s\S]+?);/匹配数组的完整内容,避免硬编码截取位置的脆弱性
  2. 处理末尾逗号:原JS文件中的数组允许末尾逗号,但JSON不支持,所以用正则替换掉对象/数组闭合前的逗号
  3. JSON解析:将处理后的数组字符串直接解析为JS对象数组,此时每个元素都是可直接操作的对象,而非字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:45:42