Minor discepancy for multiline regexps

Jim Laskey (Oracle) james.laskey at oracle.com
Fri Jan 6 13:34:31 UTC 2017


Bug filed on your behalf.  https://bugs.openjdk.java.net/browse/JDK-8172353 <https://bugs.openjdk.java.net/browse/JDK-8172353>

— Jim




> On Jan 6, 2017, at 7:27 AM, Esben Andreasen <esben at esbena.dk> wrote:
> 
> Hi
> 
> I stumbled upon a minor discrepancy between Nashorn and other
> JavaScript engines when doing regexp matching with the multiline flag
> enabled.
> 
> Nashorn
> ```
> $ jjs -version
> nashorn 1.8.0_111
> jjs> String.prototype.replace.apply("a\nb\rc\n\rd\r\ne", [/^(.*)/gm,"*$1"]);
> *a
> *c
> **
> *e
> ```
> 
> Notice that the characters 'b' and 'd' are gone from the output.
> 
> Node:
> ```
> $ node --version
> v5.5.0
> $ node
>> String.prototype.replace.apply("a\nb\rc\n\rd\r\ne", [/^(.*)/gm,"*$1"]);
> '*a\n*b\r*c\n*\r*d\r*\n*e'
> ```
> 
> Firefox & Chrome console:
> ```
>> String.prototype.replace.apply("a\nb\rc\n\rd\r\ne", [/^(.*)/gm,"*$1"]);
> "*a
> *b
> *c
> *
> *d
> *
> *e"
> ```
> 
> Notice that the characters 'b' and 'd' are in the output.
> 
> -
> 
> I suspect the cause is that nashorn does treat the character after
> '\r' as being at the start of a line.
> 
> -
> Esben



More information about the nashorn-dev mailing list