   # Constructs a string token by escaping quotes and newlines.
   makeString: (body, quote, heredoc) ->
     return quote + quote unless body
-    body = body.replace /\\([^])/g, (match, contents) ->
+    body = body.replace /\\([\s\S])/g, (match, contents) ->
       if contents is quote or heredoc and contents is '\n' then contents else match
     body = body.replace /// #{quote} ///g, '\\$&'
     quote + @escapeLines(body, heredoc) + quote

      when "'"
        return 0 unless match = SIMPLESTR.exec @chunk
        string = match[0]
        @token 'STRING', @trimAndEscapeLines(string), 0, string.length
      when '"'
        return 0 unless string = @balancedString @chunk, '"'
        if 0 < string.indexOf '#{', 1
          @interpolateString string[1...-1], strOffset: 1, lexedLength: string.length
        else
          @token 'STRING', @trimAndEscapeLines(string), 0, string.length
      else
        return 0
    if octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test string


MULTI_DENT = /^(?:\n[^\n\S]*)+/

SIMPLESTR  = /^'[^\\']*(?:\\[\s\S][^\\']*)*'/

JSTOKEN    = /^`[^\\`]*(?:\\.[^\\`]*)*`/

