Rumah > hujung hadapan web > tutorial js > Bagaimanakah saya boleh menghuraikan rentetan CSV dengan koma terbenam dalam medan petikan menggunakan ungkapan biasa dalam JavaScript?

Bagaimanakah saya boleh menghuraikan rentetan CSV dengan koma terbenam dalam medan petikan menggunakan ungkapan biasa dalam JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-12-04 16:45:12
asal
963 orang telah melayarinya

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

Penghuraian Rentetan CSV berasaskan Regex

Pernyataan Masalah:

Hilang rentetan CSV dengan koma dibenamkan dalam nilai yang disebut, sambil mengabaikan koma di luar petikan.

Penyelesaian Gambaran Keseluruhan:**

Untuk menghuraikan rentetan CSV dengan betul yang mungkin mengandungi nilai petikan dengan aksara yang dilepaskan, anda perlu menelusuri rentetan aksara demi aksara. Dua ungkapan biasa digunakan:

CSV Validation Regex:

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

regex ini memastikan bahawa rentetan input mengikut format CSV yang ditentukan, di mana:

  • Nilai boleh disebut petikan tunggal, petikan dua kali atau tidak dipetik.
  • Nilai yang dipetik mungkin mengandungi aksara yang dilepaskan.
  • Koma digunakan sebagai pemisah.

Value Parsing Regex:

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

regex ini mengekstrak satu nilai pada satu masa daripada rentetan CSV, dengan mengambil kira peraturan yang sama sebagai regex pengesahan. Ia mengendalikan nilai yang disebut dan mengalih keluar aksara yang dilarikan.

Pelaksanaan JavaScript:**

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;
}
Salin selepas log masuk

Contoh Penggunaan:**

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

Atas ialah kandungan terperinci Bagaimanakah saya boleh menghuraikan rentetan CSV dengan koma terbenam dalam medan petikan menggunakan ungkapan biasa dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan