diff --git a/lib/lexer.js b/lib/lexer.js index 6cf74b84..16d14fb6 100644 --- a/lib/lexer.js +++ b/lib/lexer.js @@ -205,11 +205,12 @@ return true; }; Lexer.prototype.heregexToken = function(match) { - var _ref2, body, flags, heregex; + var _ref2, body, flags, heregex, re; _ref2 = match, heregex = _ref2[0], body = _ref2[1], flags = _ref2[2]; this.i += heregex.length; if (!(~body.indexOf('#{'))) { - this.token('REGEX', '/' + body.replace(HEREGEX_OMIT, '') + '/' + flags); + re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/'); + this.token('REGEX', "/" + (re || '(?:)') + "/" + (flags)); return true; } this.token('IDENTIFIER', 'RegExp'); diff --git a/src/lexer.coffee b/src/lexer.coffee index e0dc758a..d03b6287 100644 --- a/src/lexer.coffee +++ b/src/lexer.coffee @@ -198,7 +198,8 @@ exports.Lexer = class Lexer [heregex, body, flags] = match @i += heregex.length unless ~body.indexOf '#{' - @token 'REGEX', '/' + body.replace(HEREGEX_OMIT, '') + '/' + flags + re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/') + @token 'REGEX', "/#{ re or '(?:)' }/#{flags}" return true @token 'IDENTIFIER', 'RegExp' @tokens.push ['CALL_START', '('] diff --git a/test/test_regexps.coffee b/test/test_regexps.coffee index 77a1466e..ff7c3ff3 100644 --- a/test/test_regexps.coffee +++ b/test/test_regexps.coffee @@ -27,8 +27,8 @@ ok ' '.match regexp ok (obj.width()/id - obj.height()/id) is -5 -eq /^I'm\s+Heregex?/gim + '', /// - ^ I'm \s+ Heregex? # or not +eq /^I'm\s+Heregex?\/\/\//gim + '', /// + ^ I'm \s+ Heregex? / // # or not ///gim + '' eq '\\\\#{}', /// #{ @@ -36,3 +36,4 @@ eq '\\\\#{}', /// } \#{} ///.source +eq /// /// + '', '/(?:)/'