diff --git a/parser/expression.go b/parser/expression.go index fe73fa27..2c8e2994 100644 --- a/parser/expression.go +++ b/parser/expression.go @@ -136,8 +136,8 @@ func (p *parser) parseRegExpLiteral() *ast.RegExpLiteral { flags := "" if p.token == token.IDENTIFIER { // gim flags = p.literal + endOffset = p.chrOffset p.next() - endOffset = p.chrOffset - 1 } var value string diff --git a/parser/parser_test.go b/parser/parser_test.go index 165a688b..303e01d9 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -975,6 +975,32 @@ func Test_parseNumberLiteral(t *testing.T) { }) } +func Test_praseRegExpLiteral(t *testing.T) { + tt(t, func() { + test := func(input, literal, pattern, flags string) { + parser := newParser("", input, 1, nil) + program, err := parser.parse() + is(err, nil) + + regex := program.Body[0].(*ast.ExpressionStatement).Expression.(*ast.RegExpLiteral) + is(regex.Literal, literal) + is(regex.Pattern, pattern) + is(regex.Flags, flags) + } + + test("/abc/", "/abc/", "abc", "") + test("/abc/gim", "/abc/gim", "abc", "gim") + test("/abc/ ", "/abc/", "abc", "") + test("/abc/gim ", "/abc/gim", "abc", "gim") + test("/abc/;", "/abc/", "abc", "") + test("/abc/gim;", "/abc/gim", "abc", "gim") + test("/abc/\n", "/abc/", "abc", "") + test("/abc/gim\n", "/abc/gim", "abc", "gim") + test("/abc/;\n", "/abc/", "abc", "") + test("/abc/gim;\n", "/abc/gim", "abc", "gim") + }) +} + func TestPosition(t *testing.T) { tt(t, func() { parser := newParser("", "// Lorem ipsum", 1, nil)