ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の正規表現を使用して、引用符で囲まれたフィールドにカンマが埋め込まれた CSV 文字列を解析するにはどうすればよいですか?

JavaScript の正規表現を使用して、引用符で囲まれたフィールドにカンマが埋め込まれた CSV 文字列を解析するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-04 16:45:12941ブラウズ

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

正規表現ベースの CSV 文字列解析

問題ステートメント:

引用符で囲まれた値の中にカンマが埋め込まれた CSV 文字列を解析します。引用符の外側のカンマは無視します。

解決策概要:**

エスケープ文字を含む引用符で囲まれた値を含む可能性のある CSV 文字列を適切に解析するには、文字列を 1 文字ずつ確認する必要があります。 2 つの正規表現が使用されます:

CSV 検証正規表現:

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

この正規表現は、入力文字列が定義された CSV 形式に従っていることを保証します。ここで、

  • 値は一重引用符、二重引用符、または引用符なし。
  • 引用符で囲まれた値にはエスケープ文字が含まれる場合があります。
  • カンマは区切り文字として使用されます。

値解析正規表現:

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

この正規表現は、CSV 文字列から一度に 1 つの値を抽出します。検証正規表現と同じルールを考慮します。引用符で囲まれた値を処理し、エスケープ文字を削除します。

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

使用例:**

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

以上がJavaScript の正規表現を使用して、引用符で囲まれたフィールドにカンマが埋め込まれた CSV 文字列を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。