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

JavaScript CSV转数组时如何避免拆分双引号内部的逗号

问题根因

你当前的实现逻辑没有遵循CSV标准转义规则:被双引号包裹的字段内部的逗号不属于字段分隔符,而你提前删除所有引号、直接按逗号拆分的逻辑会直接把这类字段拆成多个值,最终导致字段映射错位。

修复后代码

function csvToArray(str, delimiter = ",") {
    // CSV字段匹配正则:优先匹配双引号包裹的内容,忽略内部的分隔符
    const csvFieldRegex = new RegExp(
        `(\\s*"[^"]*"\\s*|[^${delimiter}]+)`,
        'g'
    );

    // 处理表头
    const headerRow = str.slice(0, str.indexOf("\n"));
    let headers = headerRow.match(csvFieldRegex).map(field => 
        field.replace(/["\s]+/g, '').replace(/[^A-Z0-9]+/ig, "_")
    );

    // 提取有效数据行
    const rows = str.slice(str.indexOf('\n') + 1).split('\n').filter(row => row.trim());
    
    // 映射为对象数组
    return rows.map(row => {
        const values = row.match(csvFieldRegex).map(field => 
            // 仅去除字段首尾的包裹引号,保留内部合法内容
            field.trim().replace(/^"|"$/g, '')
        );
        return headers.reduce((obj, header, index) => {
            obj[header] = values[index] ?? '';
            return obj;
        }, {});
    });
}

核心修改点

  • 新增CSV字段专用匹配规则,自动识别被双引号包裹的内容,不会把内部的逗号当做分隔符拆分
  • 取消全局删除所有引号的逻辑,仅清理每个字段首尾的包裹引号,保留字段内部的正常内容
  • 新增空行过滤和缺省值兜底,避免空行、字段缺失时生成无效数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:03