title: regexp containing ^ and * will lose one character?
body: <p>JS demo:</p>
  
  <pre><code>// words not ending with abc
  var r = new RegExp("(.*)[^(?:abc)]$")
  var s = 'zzxxxyy'
  console.log(r.exec(s))
  </code></pre>
  
  <p>output:</p>
  
  <p><code>[ 'zzxxxyy', 'zzxxxy', index: 0, input: 'zzxxxyy' ]</code></p>
  
  <p>why is <code>group(1)</code> <code>zzxxxy</code>, rather than <code>zzxxxyy</code></p>