Heim > Web-Frontend > js-Tutorial > Wie kann JavaScript CSV-Strings mit Kommas in Feldern in Anführungszeichen effektiv analysieren?

Wie kann JavaScript CSV-Strings mit Kommas in Feldern in Anführungszeichen effektiv analysieren?

Barbara Streisand
Freigeben: 2024-12-08 11:46:11
Original
296 Leute haben es durchsucht

How Can JavaScript Effectively Parse CSV Strings with Commas in Quoted Fields?

Umgang mit Kommas in zitierten CSV-Feldern mit JavaScript

Beim Umgang mit CSV-Zeichenfolgen (Comma-Separated Values) in JavaScript kann das Parsen kann eine Herausforderung sein, wenn Daten in Feldern in Anführungszeichen Kommas enthalten können. So können Sie dieses Szenario mit einer detaillierten Lösung effektiv bewältigen:

Regex zum Validieren und Parsen von CSV-Zeichenfolgen

Um sicherzustellen, dass die Eingabezeichenfolge eine gültige CSV-Zeichenfolge ist , definieren wir einen Validierungs-Regex:

re_valid = r"""
# Validate a CSV string having single, double or un-quoted values.
^                                   # Anchor to start of string.
\s*                                 # Allow whitespace before value.
(?:                                 # Group for value alternatives.
  '[^'\]*(?:\[\S\s][^'\]*)*'     # Either Single quoted string,
| "[^"\]*(?:\[\S\s][^"\]*)*"     # or Double quoted string,
| [^,'"\s\]*(?:\s+[^,'"\s\]+)*    # or Non-comma, non-quote stuff.
)                                   # End group of value alternatives.
\s*                                 # Allow whitespace after value.
(?:                                 # Zero or more additional values
  ,                                 # Values separated by a comma.
  \s*                               # Allow whitespace before value.
  (?:                               # Group for value alternatives.
    '[^'\]*(?:\[\S\s][^'\]*)*'   # Either Single quoted string,
  | "[^"\]*(?:\[\S\s][^"\]*)*"   # or Double quoted string,
  | [^,'"\s\]*(?:\s+[^,'"\s\]+)*  # or Non-comma, non-quote stuff.
  )                                 # End group of value alternatives.
  \s*                               # Allow whitespace after value.
)*                                  # Zero or more additional values
$                                   # Anchor to end of string.
"""
Nach dem Login kopieren

Um einzelne Werte aus der validierten CSV zu analysieren string verwenden wir den folgenden regulären Ausdruck:

re_value = r"""
# Match one value in valid CSV string.
(?!\s*$)                            # Don't match empty last value.
\s*                                 # Strip whitespace before value.
(?:                                 # Group for value alternatives.
  '([^'\]*(?:\[\S\s][^'\]*)*)'   # Either : Single quoted string,
| "([^"\]*(?:\[\S\s][^"\]*)*)"   # or : Double quoted string,
| ([^,'"\s\]*(?:\s+[^,'"\s\]+)*)  # or : Non-comma, non-quote stuff.
)                                   # End group of value alternatives.
\s*                                 # Strip whitespace after value.
(?:,|$)                             # Field ends on comma or EOS.
"""
Nach dem Login kopieren

CSV-Parsing-Funktion

Mit diesen definierten regulären Ausdrücken können wir eine Funktion zum Parsen des CSV-Strings implementieren:

function CSVtoArray(text) {
  // Return NULL if input string is not well formed CSV string.
  if (!re_valid.test(text)) return null;
  var 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;
}
Nach dem Login kopieren

Beispiel Verwendung

Hier sind einige Beispiele für CSV-Eingabezeichenfolgen und die entsprechenden analysierten Ausgaben:

// Test string from original question
let result = CSVtoArray("'string, duppi, du', 23, lala");
console.log(result);  // ['string, duppi, du', '23', 'lala']

// Empty CSV string
let result = CSVtoArray("");
console.log(result);  // []

// CSV string with two empty values
let result = CSVtoArray(",");
console.log(result);  // ['', '']

// Double quoted CSV string having single quoted values
let result = CSVtoArray("'one','two with escaped \' single quote', 'three, with, commas'");
console.log(result);  // ['one', 'two with escaped \' single quote', 'three, with, commas']

// Single quoted CSV string having double quoted values
let result = CSVtoArray('"one","two with escaped \" double quote", "three, with, commas"');
console.log(result);  // ['one', 'two with escaped " double quote', 'three, with, commas']

// CSV string with whitespace in and around empty and non-empty values
let result = CSVtoArray("   one  ,  'two'  ,  , ' four' ,, 'six ', ' seven ' ,  ");
console.log(result);  // ['one', 'two', '', 'four', '', 'six ', ' seven ']

// Not valid
let result = CSVtoArray("one, that's me!, escaped \, comma");
console.log(result);  // null
Nach dem Login kopieren

Diese Lösung gewährleistet eine genaue Analyse von CSV-Zeichenfolgen und verarbeitet Felder in Anführungszeichen, die Kommas enthalten, während sie eingehalten werden den spezifizierten Anforderungen entsprechen.

Das obige ist der detaillierte Inhalt vonWie kann JavaScript CSV-Strings mit Kommas in Feldern in Anführungszeichen effektiv analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage