diff --git a/papaparse.js b/papaparse.js index 66dba9d5..7febbaf8 100755 --- a/papaparse.js +++ b/papaparse.js @@ -278,7 +278,7 @@ License: MIT unpackConfig(); - var quoteCharRegex = new RegExp(_quoteChar, 'g'); + var quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), 'g'); if (typeof _input === 'string') _input = JSON.parse(_input); @@ -1417,7 +1417,7 @@ License: MIT var nextDelim = input.indexOf(delim, cursor); var nextNewline = input.indexOf(newline, cursor); - var quoteCharRegex = new RegExp(escapeChar.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&') + quoteChar, 'g'); + var quoteCharRegex = new RegExp(escapeRegExp(escapeChar) + escapeRegExp(quoteChar), 'g'); var quoteSearch; // Parser loop diff --git a/tests/test-cases.js b/tests/test-cases.js index 69b9b259..2e19d681 100644 --- a/tests/test-cases.js +++ b/tests/test-cases.js @@ -1358,7 +1358,7 @@ var PARSE_TESTS = [ } }, { - description: "Using reserved regex characters as quote characters", + description: "Using reserved regex character . as quote character", input: '.a\na.,b\r\nc,d\r\ne,f\r\ng,h\r\ni,j', config: { quoteChar: '.' }, expected: { @@ -1373,6 +1373,22 @@ var PARSE_TESTS = [ } } }, + { + description: "Using reserved regex character | as quote character", + input: '|a\na|,b\r\nc,d\r\ne,f\r\ng,h\r\ni,j', + config: { quoteChar: '|' }, + expected: { + data: [['a\na', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'j']], + errors: [], + meta: { + linebreak: '\r\n', + delimiter: ',', + cursor: 27, + aborted: false, + truncated: false + } + } + }, { description: "Parsing with skipEmptyLines set to 'greedy'", notes: "Must parse correctly without lines with no content",