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?
Problemstellung:
Parsen Sie einen CSV-String mit in Anführungszeichen eingebetteten Kommas. Dabei werden Kommas außerhalb von Anführungszeichen ignoriert.
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:
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.
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; }
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!