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

JavaScript如何解析CSV并拆分特殊字符内容生成新列

CSV带HTML字段拆分实现方案

你已经完成Papa Parse初解析的前提下,按以下步骤实现即可:

第一步:确认Papa Parse初始解析配置,避免初解析错误

Papa Parse本身默认支持识别双引号包裹的字段,只要开启对应配置,就不会把引号内的逗号、换行识别为分隔符,初解析配置参考:

const parseResult = Papa.parse(csvRawContent, {
  header: false, // 需自行处理表头时设为false即可
  quotes: true, // 核心配置:识别双引号包裹字段,内部的,和\n不会被当做分隔符
  skipEmptyLines: true,
  trimHeaders: true
})

第二步:提取HTML描述字段的列表内容

注意表头索引从0开始,描述字段对应索引为3(你提到的rowsId[4]实际是Meta字段,注意调整索引对应关系),用正则匹配所有<li>标签内的文本即可:

const allRows = parseResult.data
const [header, ...dataRows] = allRows

// 批量处理每行数据
const processedRows = dataRows.map(row => {
  const [id, cod, name, descHtml, meta] = row
  // 匹配所有li标签内的内容,加s标志支持匹配换行内容
  const liReg = /<li>(.*?)<\/li>/gs
  const descItems = []
  let match
  while((match = liReg.exec(descHtml)) !== null) {
    // 去除内容多余换行、首尾空格
    descItems.push(match[1].replace(/\n/g, '').trim())
  }
  // 重组行数组,同时清理name字段多余的引号
  return [id, cod, name.replace(/"/g, ''), ...descItems, meta]
})

// 生成新表头,按最大描述项数生成Dscription1、Dscription2...
const maxDescCount = Math.max(...processedRows.map(row => row.length - 4))
const newHeader = [
  'ID', 'COD', 'Name',
  ...Array.from({length: maxDescCount}, (_, i) => `Dscription${i+1}`),
  'Meta'
]

const finalCsvData = [newHeader, ...processedRows]

第三步:导出为新CSV文件

直接调用Papa Parse的unparse方法即可,工具会自动给含逗号、特殊字符的字段加双引号,不需要手动处理:

const outputCsv = Papa.unparse(finalCsvData, {
  quotes: true,
  newline: '\n'
})

// 前端下载示例
const blob = new Blob([outputCsv], {type: 'text/csv;charset=utf-8;'})
const link = document.createElement('a')
link.href = URL.createObjectURL(blob)
link.download = 'processed_products.csv'
link.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:24:02