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

如何在JavaScript中处理CSV文件比较时的双引号问题

解决商品标题与CSV文件双引号转义的匹配问题

问题背景

你现在需要把网站上9000+商品的标题和CSV文件做比对,已经实现了商品检查和CSV遍历的基础功能,但遇到了一个麻烦:部分商品标题里带有尺寸相关的双引号(比如Product item A 1/2"),而CSV文件里这类双引号会被转成两个双引号(""),导致两边的字符串匹配不上,没法执行后续操作。

现有代码

HTML代码

<div class="item-options"> 
    <!--START: itemnamelink-->
    <a href="product.asp?itemid=[ITEM_CATALOGID]">[ITEM_NAME]</a>
    <!--END: itemnamelink--> 
    <!--START: itemnamenolink-->
    <span id="Span1">[ITEM_NAME]</span>
    <!--END: itemnamenolink--> 
    <!--START: itemoptions--> 
    <br /> 
    <a href="#" onclick="toggleProdOptions('opt[ITEM_ID]')">View/Hide options</a>
    <br /> 
    <div id="opt[ITEM_ID]" name="opt[ITEM_ID]" style="display:none;">[OPTIONS]</div> 
    <!--END: itemoptions--> 
    <!--START: recurring_frequency--> 
    <br /> This item will Autoship every <strong>[recurring_frequency]</strong> 
    <!--END: recurring_frequency-->
</div> 

JavaScript代码

$(document).ready(function() { 
    var itemToStore = document.getElementsByClassName("item-options"); 
    localStorage.setItem("itemToStore", JSON.stringify(itemToStore)); 
    var retrieved = localStorage.getItem("itemToStore"); 
    for (var i = 0; i < itemToStore.length; i++) { 
        var itemName= itemToStore[i].innerText; 
        var name = (""+itemName).replace(/['"]+/g,''); 
        console.log("Name: " + name); 
    } 
    $.ajax({ 
        type: "GET", 
        url: "assets/exports/pipe.csv", 
        dataType:"text", 
        success: function(data) { 
            var code = name.split("\n"); 
            for(var i=0;i<code.length;i++) { 
                code[i]="\""+code[i]+"\""; 
            } 
            var pipeString = code.join("\n"); 
            var test = "Pipe"; 
            console.log(test); 
            // Flag that value found 
            var found = false; 
            // Remove \n and split by , 
            var listPipe = data.split('\r\n').map(function(row) { 
                return row.split(','); 
            }); 
            var pipeList = (""+listPipe).replace(/['"]+/g,''); 
            console.log(pipeList); 
            // Array of arrays like be generated 
            for (var i = 0; i < listPipe.length; i++) { 
                if ($.inArray(test, listPipe) !== -1) { 
                    found = true; 
                    console.log("found"); 
                } else { 
                    console.log("not found"); 
                } 
            } 
        } 
    }); 
}); 

相关截图

CSV文件内容

CSV文件内容

控制台输出

控制台输出

具体解决思路

1. 统一双引号处理逻辑

CSV里的""是标准的双引号转义格式(当字段包含双引号时,CSV会用两个双引号来表示单个双引号),所以我们需要在解析CSV时把""转回单个",同时保留商品标题里的双引号(或者做对应处理),让两边的字符串格式统一。

修改JS代码里的CSV解析部分:

// 解析CSV时处理转义的双引号
var listPipe = data.split('\r\n').map(function(row) {
    // 将CSV中的""替换为单个"
    var cleanedRow = row.replace(/""/g, '"');
    // 再按逗号分割字段
    return cleanedRow.split(',');
});

同时修改商品标题的处理逻辑,不要直接去掉所有引号,而是保留原样(只清理多余空格):

var itemName = itemToStore[i].innerText;
// 去掉前后空格,保留标题里的双引号
var name = itemName.trim();
console.log("Name: " + name);

2. 改用专业CSV解析库(更推荐)

手动解析CSV很容易踩坑(比如字段里包含逗号、换行的情况),推荐使用成熟的CSV解析库,比如Papa Parse,它能自动处理CSV的各种转义规则,包括双引号的转义,让解析更准确。

使用示例:

// 先引入Papa Parse库(可以通过CDN或者本地引入)
$.ajax({
    type: "GET",
    url: "assets/exports/pipe.csv",
    dataType:"text",
    success: function(data) {
        // 用Papa Parse解析CSV
        var parsedData = Papa.parse(data, {
            header: false, // 根据你的CSV是否有表头调整
            skipEmptyLines: true
        });
        var listPipe = parsedData.data;
        
        // 后续匹配逻辑
        var test = "Pipe";
        var found = false;
        for (var i = 0; i < listPipe.length; i++) {
            if ($.inArray(test, listPipe[i]) !== -1) {
                found = true;
                console.log("found");
            } else {
                console.log("not found");
            }
        }
    }
});

3. 匹配时的容错处理

如果商品标题和CSV里的字符串还有其他细微差异(比如大小写、空格),可以统一转换成小写、去掉多余空格后再匹配,进一步提高匹配成功率:

// 处理商品标题
var name = itemName.trim().toLowerCase();
// 处理CSV字段
var cleanedCsvField = csvField.trim().toLowerCase();
// 再进行匹配
if (name === cleanedCsvField) {
    // 匹配成功逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:01:25