在这种情况下,您需要一个解决方案来区分引号内的逗号与那些分隔值。正则表达式是完成此任务的理想工具。解决方法如下:
// 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中文网其他相关文章!