首頁 >web前端 >js教程 >正規表示式如何解決JavaScript中資料欄位中帶有逗號的CSV字串解析問題?

正規表示式如何解決JavaScript中資料欄位中帶有逗號的CSV字串解析問題?

DDD
DDD原創
2024-12-07 04:14:10199瀏覽

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

JavaScript 中可解析的CSV 字串

解析資料中帶逗號的CSV

在這種情況下,您需要一個解決方案來區分引號內的逗號與那些分隔值。正規表示式是完成此任務的理想工具。解決方法如下:

正規表示式解決方案

  1. 定義CSV 字串結構: 決定有效CSV 字串的特徵,包括帶引號的字串,轉義字元和資料格式。
  2. CSV 的正規表示式驗證: 建立一個正規表示式來驗證給定字串是否滿足這些條件。
  3. 用於值提取的正則表達式: 構造一個正則表達式以匹配並從有效的CSV 字符串中提取各個值,考慮帶引號和不帶引號的字符串以及尾隨逗號。

實作

// 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;
};

範例用法

// 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']

此方法有效解析CSV 字串,保留引用值的完整性並正確處理逗號在資料欄位內。您可以調整正規表示式來自訂特定 CSV 字串變體或格式要求的處理。

以上是正規表示式如何解決JavaScript中資料欄位中帶有逗號的CSV字串解析問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn