jviereck / regjsparser

Parsing the JavaScript's RegExp in JavaScript.
http://www.julianviereck.de/regjsparser/
BSD 2-Clause "Simplified" License
77 stars 20 forks source link

Quantifiable assertions should be disallowed with `u` flag #134

Closed JLHwung closed 10 months ago

JLHwung commented 1 year ago
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-regular-expressions-patterns
es6id: B.1.4
description: Quantifiable assertions disallowed with `u` flag
info: |
    The `u` flag precludes quantifiable assertions (even when Annex B is
    honored)

    Term[U] ::
         [~U] QuantifiableAssertion Quantifier
negative:
  phase: parse
  type: SyntaxError
---*/

$DONOTEVALUATE();

/.(?!.){2,3}/u;

In 0.9.1, regjsparser throws

SyntaxError [Error]: Expected atom at position 6
      .(?!.){2,3}

In 0.10.0, it parses successfully. This is likely a regression introduced in https://github.com/jviereck/regjsparser/pull/131.

c.f. https://github.com/tc39/test262/blob/main/test/language/literals/regexp/u-invalid-range-negative-lookahead.js https://github.com/mathiasbynens/regexpu-core/issues/88