> Le 19 nov. 2015 à 20:17, Nozomu Katō <noz...@akenotsuki.com> a écrit :
> 
> On Thu, 19 Nov 2015 09:04:41 +0100, Yang Guo wrote:
>> This implementation supports variable length lookbehind similar to .NET's
>> semantics. It does so by emitting code to read backwards inside the
>> lookbehind. The size of the change without platform ports and tests is
>> about 600 lines.
> 
> When regular expressions inside a look-behind are evaluated backwards,
> the automaton will not have a chance to know what has been captured in
> $1 in /(?<=(.)$1)/, since the automaton reaches $1 prior to (.).
> 
> This can be fixed by defining that a backreference referring to a
> capture inside the same look-behind has to be put leftwards contrary to
> the usual rule, but saying so would impose reading regular expressions
> backwards or prefetching forward expressions inside a look-behind upon
> the parser, to know if the corresponding capturing parentheses exist.
> 
> I am not sure if it is easy or there is a simpler solution, anyhow, if
> ECMAScript supports .NET-like look-behinds this matter would need to be
> fixed.
> 
> Nozomu

There is always the coward solution: forbid backreferences inside lookbehinds.

If we are going to ask programmers to write /(?<\1(.))/, it may be a good idea 
to prevent footguns like /(?<(.)\1)/ by throwing a syntax error (for it can be 
statically determined that it will not work as intended).

—Claude

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to