Rumah >hujung hadapan web >tutorial js >Bagaimanakah saya boleh menghuraikan rentetan CSV dengan koma terbenam dalam medan petikan menggunakan ungkapan biasa dalam JavaScript?
Pernyataan Masalah:
Hilang rentetan CSV dengan koma dibenamkan dalam nilai yang disebut, sambil mengabaikan koma di luar petikan.
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*)*$
regex ini memastikan bahawa rentetan input mengikut format CSV yang ditentukan, di mana:
Value Parsing Regex:
(?!\s*$)\s*(?:'([^'\]*(?:\[\S\s][^'\]*)*)'|"([^"\]*(?:\[\S\s][^"\]*)*)"|([^,'"\s\]*(?:\s+[^,'"\s\]+)*)|)\s*(?:,|$)
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.
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"]
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!