Maison >interface Web >js tutoriel >Comment les expressions régulières peuvent-elles résoudre le problème de l'analyse des chaînes CSV avec des virgules dans les champs de données en JavaScript ?

Comment les expressions régulières peuvent-elles résoudre le problème de l'analyse des chaînes CSV avec des virgules dans les champs de données en JavaScript ?

DDD
DDDoriginal
2024-12-07 04:14:10199parcourir

How Can Regular Expressions Solve the Problem of Parsing CSV Strings with Commas in Data Fields in JavaScript?

Chaînes CSV analysables en JavaScript

Analyse CSV avec des virgules dans les données

Dans cette situation, vous avez besoin d'une solution qui distingue les virgules entre guillemets de celles qui séparent les valeurs. Une expression régulière est l’outil idéal pour cette tâche. Voici comment aborder cela :

La solution Regex

  1. Définir la structure de la chaîne CSV : Déterminer les caractéristiques d'une chaîne CSV valide, y compris les chaînes entre guillemets, caractères d'échappement et formatage des données.
  2. Regex pour la validation CSV : Créez un regex qui valide si une chaîne donnée répond à ces critères.
  3. Regex pour l'extraction de valeurs : Construisez une regex pour faire correspondre et extraire les valeurs individuelles de la chaîne CSV valide, en tenant compte des chaînes entre guillemets et non citées et des chaînes de fin. virgules.

Mise en œuvre

// 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 to parse CSV string into array
const CSVtoArray = (text) => {
  // Validate CSV string
  if (!re_valid.test(text)) return null;

  const values = [];

  text.replace(re_value, (m0, m1, m2, m3) => {
    // Handle single-quoted values
    if (m1 !== undefined) values.push(m1.replace(/\'/g, "'"));

    // Handle double-quoted values
    else if (m2 !== undefined) values.push(m2.replace(/\"/g, '"'));

    // Handle unquoted values
    else if (m3 !== undefined) values.push(m3);

    return '';
  });

  // Handle special case of empty last value
  if (/,\s*$/.test(text)) values.push('');

  return values;
};

Exemple Utilisation

// Sample CSV string with commas in data
const csvString = "'string, with comma', 23, 'lala'";

// Parse the CSV string into an array of values
const values = CSVtoArray(csvString);

console.log(values); // ['string, with comma', '23', 'lala']

Cette approche analyse efficacement la chaîne CSV, préservant l'intégrité des valeurs citées et gérant correctement les virgules dans les champs de données. Vous pouvez ajuster l'expression régulière pour personnaliser la gestion des variations spécifiques de la chaîne CSV ou des exigences de formatage.

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