njs_token_t
njs_regexp_literal(njs_vm_t *vm, njs_parser_t *parser, njs_value_t *value)
{
- u_char *p;
+ u_char *p, c;
njs_lexer_t *lexer;
njs_regexp_flags_t flags;
njs_regexp_pattern_t *pattern;
for (p = lexer->start; p < lexer->end; p++) {
- if (*p == '\\') {
- p++;
- continue;
+ c = *p;
+
+ if (c == '\n' || c == '\r') {
+ break;
}
- if (*p == '/') {
+ if (c == '/' && !(p > lexer->start && p[-1] == '\\')) {
lexer->text.start = lexer->start;
lexer->text.length = p - lexer->text.start;
p++;
{ nxt_string("/"),
nxt_string("SyntaxError: Unterminated RegExp \"/\" in 1") },
+ { nxt_string("/a\n/"),
+ nxt_string("SyntaxError: Unterminated RegExp \"/a\" in 1") },
+
+ { nxt_string("/a\r/"),
+ nxt_string("SyntaxError: Unterminated RegExp \"/a\" in 1") },
+
+ { nxt_string("/a\\q/"),
+ nxt_string("/a\\q/") },
+
+ { nxt_string("/a\\q/.test('a\\q')"),
+ nxt_string("true") },
+
+ { nxt_string("/(\\.(?!com|org)|\\/)/.test('ah.info')"),
+ nxt_string("true") },
+
{ nxt_string("/(/.test('')"),
nxt_string("SyntaxError: pcre_compile(\"(\") failed: missing ) in 1") },