diff --git a/lib/lexer.js b/lib/lexer.js index 5d23d077..027d3e33 100644 --- a/lib/lexer.js +++ b/lib/lexer.js @@ -569,8 +569,8 @@ return str.replace(MULTILINER, heredoc ? '\\n' : ''); }; Lexer.prototype.makeString = function(body, quote, heredoc) { - body = body.replace(/\\([\s\S])/g, function($amp, $1) { - return ('\n' === $1 || quote === $1) ? $1 : $amp; + body = body.replace(/\\([\s\S])/g, function(match, contents) { + return ('\n' === contents || quote === contents) ? contents : match; }); body = body.replace(RegExp("" + quote, "g"), '\\$&'); return quote + this.escapeLines(body, heredoc) + quote; diff --git a/src/lexer.coffee b/src/lexer.coffee index c7cf730b..4f411cb5 100644 --- a/src/lexer.coffee +++ b/src/lexer.coffee @@ -490,8 +490,8 @@ exports.Lexer = class Lexer # Constructs a string token by escaping quotes and newlines. makeString: (body, quote, heredoc) -> - body = body.replace /\\([\s\S])/g, ($amp, $1) -> - if $1 in ['\n', quote] then $1 else $amp + body = body.replace /\\([\s\S])/g, (match, contents) -> + if contents in ['\n', quote] then contents else match body = body.replace /// #{quote} ///g, '\\$&' quote + @escapeLines(body, heredoc) + quote