diff --git a/parse.js b/parse.js index 078c3b1..072933f 100644 --- a/parse.js +++ b/parse.js @@ -16,7 +16,7 @@ var DQ = '"'; var DS = '$'; var TOKEN = ''; -var mult = Math.pow(16, 8); +var mult = 0x100000000; // Math.pow(16, 8); for (var i = 0; i < 4; i++) { TOKEN += (mult * Math.random()).toString(16); } @@ -31,11 +31,12 @@ function parseInternal(s, env, opts) { var chunker = new RegExp([ '(' + CONTROL + ')', // control chars - '(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')*' + '(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')+' ].join('|'), 'g'); - var match = s.match(chunker).filter(Boolean); - if (!match) { + var matches = s.match(chunker); + + if (!matches) { return []; } if (!env) { @@ -58,7 +59,7 @@ function parseInternal(s, env, opts) { return pre + r; } - return match.map(function (s, j) { + return matches.filter(Boolean).map(function (s, j, match) { if (commented) { return void undefined; } diff --git a/test/parse.js b/test/parse.js index 1dd7f58..2cff77a 100644 --- a/test/parse.js +++ b/test/parse.js @@ -4,6 +4,8 @@ var test = require('tape'); var parse = require('../').parse; test('parse shell commands', function (t) { + t.same(parse(''), [], 'parses an empty string'); + t.same(parse('a \'b\' "c"'), ['a', 'b', 'c']); t.same( parse('beep "boop" \'foo bar baz\' "it\'s \\"so\\" groovy"'),