Maison >interface Web >js tutoriel >Comment analyser correctement les chaînes CSV avec des virgules en JavaScript ?

Comment analyser correctement les chaînes CSV avec des virgules en JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 02:51:14971parcourir

How to Correctly Parse CSV Strings with Commas in JavaScript?

Comment gérer les virgules dans les données CSV lors de l'analyse de chaînes en JavaScript

Lorsque vous traitez des chaînes CSV contenant des données qui incluent également des virgules, l'analyse peut être délicat. Diviser la chaîne par des virgules (",") seul ne vous donnera pas le résultat souhaité si certaines valeurs sont placées entre guillemets. Voici comment analyser de telles chaînes CSV tout en respectant les guillemets :

// Regex to validate a CSV string:
const re_valid = /^\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*(?:,\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)*\s*)*$/;

// Regex to parse one value from a valid CSV string:
const re_value = /(?!\s*$)\s*(?:'([^'\]*(?:\[\S\s][^'\]*)*)'|"([^"\]*(?:\[\S\s][^"\]*)*)"|([^,'"\s\]*(?:\s+[^,'"\s\]+)*)|)\s*(?:,|$)/g;

function CSVtoArray(text) {
    if (!re_valid.test(text)) return null;
    const a = [];
    text.replace(re_value, (m0, m1, m2, m3) => {
        if      (m1 !== undefined) a.push(m1.replace(/\'/g, "'"));
        else if (m2 !== undefined) a.push(m2.replace(/\"/g, '"'));
        else if (m3 !== undefined) a.push(m3);
        return '';
    });
    if (/,\s*$/.test(text)) a.push('');
    return a;
}

Avec cette approche, vous pouvez analyser avec précision les chaînes CSV, y compris celles avec des types mixtes et des caractères d'échappement, tout en respectant les guillemets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn