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
相关产品推荐
相关产品推荐

