 NUMBER        : /^(\b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?)))\b/i
 HEREDOC       : /^("{6}|'{6}|"{3}\n?([\s\S]*?)\n?([ \t]*)"{3}|'{3}\n?([\s\S]*?)\n?([ \t]*)'{3})/
 INTERPOLATION : /(^|[\s\S]*?(?:[\\]|\\\\)?)\$([a-zA-Z_@]\w*|{[\s\S]*?(?:[^\\]|\\\\)})/
-JS            : /^(``|`([\s\S]*?)([^\\]|\\\\)`)/
 OPERATOR      : /^([+\*&|\/\-%=<>:!?]+)/
 WHITESPACE    : /^([ \t]+)/
 COMMENT       : /^(((\n?[ \t]*)?#[^\n]*)+)/

            tokens.push ['STRING', "$quote$before$quote"] if before.length
            if interp.substring(0, 1) is '{'
              inner: interp.substring(1, interp.length - 1)
              nested: lexer.tokenize "($inner)", {rewrite: no}
              nested.pop()
              tokens.push ['TOKENS', nested]
            else


  # Matches strings, including multi-line strings.
  string_token: ->
    string: @balanced_token ['"', '"'], ['${', '}']
    string: @balanced_token ["'", "'"] if string is false
    return false unless string
    @interpolate_string string.replace STRING_NEWLINES, " \\\n"
    @line += count string, "\n"
