Proposal for exact matching and matching at a position in RegExp

Steve L. steves_list at hotmail.com
Sat Feb 13 00:14:16 PST 2010


2010/2/12 Erik Corry <erik.corry at gmail.com>:

>> Agree that \G breaks some logical barrier.  I like to have a mental
>> model of the implementation internals, and \G breaks that a bit.
>
> \G is more flexible and it is rather similar to ^ conceptually.
>
> The mental model happens to be out of sync with how regexps are
> implemented.  The implicit .*? at the start of a regexp is actually
> the fastest way to implement since you are using the fast internal
> search mechanisms that the regexp engine has rather than an external
> loop that repeatedly asks "does it match here?".

\G and ^ become more dissimilar conceptually when \G is not used as the 
leading element. With or without /m, ^ can be thought of as a one-character 
lookbehind that doesn't need to know the current search position index. With 
something like /\d|\G\w/ or the contrived /(?=(x?))\1\G\w/ (equivalent to 
/(?>x?)\G\w/ or /\G[^\Wx]/), however, the regex pattern must be aware of its 
start position within the target string. I think this sort of mental model 
is commonly used, and it's because \G is harder to sync with this model that 
that I'm comfortable with introducing /y even though it ignores the prior 
art and greater flexibility of \G. But then, compatibility with other regex 
flavors is probably good enough reason to chose \G over /y.

> Certainly if the /y variant is adopted then V8 will implement it as if
> it were specified with \G.  Ie there would be two different regexps
> behind the scenes, one with and one without /y.  This is similar to
> what would happen if you could specify /i at match time instead of
> compile time.
 



More information about the es-discuss mailing list