次のテスト済みの JavaScript 関数は、このトリックを実行します。
セミコロン区切りの値:
function splitByUnescapedSemicolons(text) {
var a = []; // Array to receive results.
if (text === '') return a; // Special empty string case.
// Push first (possibly last) value.
text = text.replace(/^[^;\\]*(?:\\[\S\s][^;\\]*)*(?=;|$)/,
function(m0){a.push(m0); return '';});
// Push any 2nd, 3rd, remaining values.
text = text.replace(/;([^;\\]*(?:\\[\S\s][^;\\]*)*)/g,
function(m0, m1){a.push(m1); return '';});
return a;
}
このソリューションは、エスケープされたセミコロンを正しく処理します (エスケープされたエスケープを含む他のものもエスケープします)。
サンプルデータ:
"" == [];
";" == ['', ''];
"\;" == ['\;'];
"\\;" == ['\\', ''];
"one;two" == ['one', 'two'];
"abc;def;ghi\;jk" == ['abc', 'def', 'ghi\;jk'];
"abc;def;ghi\\;jk" == ['abc', 'def', 'ghi\\', 'jk'];