diff --git a/papaparse.js b/papaparse.js index f03e4f9..c6e0faf 100755 --- a/papaparse.js +++ b/papaparse.js @@ -1077,7 +1077,9 @@ function testEmptyLine(s, d) { var q = _config.quoteChar || '"'; - var r = _config.skipNoContentLines ? new RegExp('^[' + d + q + '\\s]*$') : new RegExp('^$'); + var r = _config.skipNoContentLines ? new RegExp('^[' + escapeRegExp(d) + escapeRegExp(q) + '\\s]*$') : new RegExp('^$'); + // var q = _config.quoteChar || '"'; + // var r = _config.skipNoContentLines ? new RegExp('^[' + d + q + '\\s]*$') : new RegExp('^$'); for (var i = 0; i < s.length; i++) if (r.test(s[i])) return true; @@ -1300,8 +1302,8 @@ } } - /** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions */ - function escapeRegExp(string) { + function escapeRegExp(string) + { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string } diff --git a/tests/test-cases.js b/tests/test-cases.js index 833fe80..b7c38b1 100644 --- a/tests/test-cases.js +++ b/tests/test-cases.js @@ -1358,6 +1358,26 @@ var PARSE_TESTS = [ data: [['a', 'b'], ['c', 'd']], errors: [] } + }, + { + description: "Parsing with skipNoContentLines and regex special char as quoteChar", + notes: "Must skip lines correctly with reserved regex char as quoteChar", + input: 'a,b\n\n,\nc,d\n , \n]],] ]\n ] ] , ] ]\n,,,,\n],,,],],]\n', + config: { skipNoContentLines: true, quoteChar: ']' }, + expected: { + data: [['a', 'b'], ['c', 'd']], + errors: [] + } + }, + { + description: "Parsing with skipNoContentLines and regex special char as delimiter", + notes: "Must skip lines correctly with reserved regex char as delimiter", + input: 'a]b\n\n]\nc]d\n ] \n""]" "\n " " ] " "\n]]]]\n"]]]"]"]"\n', + config: { skipNoContentLines: true, delimiter: ']' }, + expected: { + data: [['a', 'b'], ['c', 'd']], + errors: [] + } } ];