Heim >Web-Frontend >js-Tutorial >Wie kann ich eine CSV-Zeichenfolge mit eingebetteten Kommas in Feldern in Anführungszeichen mithilfe regulärer Ausdrücke in JavaScript analysieren?

Wie kann ich eine CSV-Zeichenfolge mit eingebetteten Kommas in Feldern in Anführungszeichen mithilfe regulärer Ausdrücke in JavaScript analysieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-04 16:45:12941Durchsuche

How can I parse a CSV string with embedded commas in quoted fields using regular expressions in JavaScript?

Regex-basiertes CSV-String-Parsing

Problemstellung:

Parsen Sie einen CSV-String mit in Anführungszeichen eingebetteten Kommas. Dabei werden Kommas außerhalb von Anführungszeichen ignoriert.

Lösung Übersicht:**

Um eine CSV-Zeichenfolge, die möglicherweise in Anführungszeichen gesetzte Werte mit Escapezeichen enthält, richtig zu analysieren, ist es notwendig, die Zeichenfolge Zeichen für Zeichen durchzugehen. Es werden zwei reguläre Ausdrücke verwendet:

CSV-Validierungs-Regex:

^\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*(?:,\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*)*$

Dieser Regex stellt sicher, dass die Eingabezeichenfolge dem definierten CSV-Format folgt, wobei:

  • Werte können in einfache oder doppelte Anführungszeichen gesetzt werden ohne Anführungszeichen.
  • Werte in Anführungszeichen können Escapezeichen enthalten.
  • Kommas werden als Trennzeichen verwendet.

Wertparsing Regex:

(?!\s*$)\s*(?:'([^'\]*(?:\[\S\s][^'\]*)*)'|"([^"\]*(?:\[\S\s][^"\]*)*)"|([^,'"\s\]*(?:\s+[^,'"\s\]+)*)|)\s*(?:,|$)

Dieser reguläre Ausdruck extrahiert jeweils einen Wert aus der CSV-Zeichenfolge und berücksichtigt dabei die gleichen Regeln wie der Validierungs-Regex. Es verarbeitet Werte in Anführungszeichen und entfernt Escape-Zeichen.

JavaScript-Implementierung:**

function CSVtoArray(text) {
    const re_valid = /^\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*(?:,\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*)*$/;
    const re_value = /(?!\s*$)\s*(?:'([^'\]*(?:\[\S\s][^'\]*)*)'|"([^"\]*(?:\[\S\s][^"\]*)*)"|([^,'"\s\]*(?:\s+[^,'"\s\]+)*))\s*(?:,|$)/g;
    // Return NULL if input string is not well formed CSV string.
    if (!re_valid.test(text)) return null;
    const a = [];                     // Initialize array to receive values.
    text.replace(re_value, // "Walk" the string using replace with callback.
        function(m0, m1, m2, m3) {
            // Remove backslash from \' in single quoted values.
            if      (m1 !== undefined) a.push(m1.replace(/\'/g, "'"));
            // Remove backslash from \" in double quoted values.
            else if (m2 !== undefined) a.push(m2.replace(/\"/g, '"'));
            else if (m3 !== undefined) a.push(m3);
            return ''; // Return empty string.
        });
    // Handle special case of empty last value.
    if (/,\s*$/.test(text)) a.push('');
    return a;
}

Beispielverwendung:**

const csvString = "'string, duppi, du', 23, lala";
const result = CSVtoArray(csvString);
console.log(result); // ["string, duppi, du", "23", "lala"]

Das obige ist der detaillierte Inhalt vonWie kann ich eine CSV-Zeichenfolge mit eingebetteten Kommas in Feldern in Anführungszeichen mithilfe regulärer Ausdrücke in JavaScript analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn