// Copyright 2020 the V8 project authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
const access_log = []; | |
const handler = { | |
get: function(obj, prop) { | |
access_log.push(prop); | |
return prop in obj ? obj[prop] : "z"; | |
} | |
}; | |
class ProxiedGroupRegExp extends RegExp { | |
exec(s) { | |
var result = super.exec(s); | |
if (result) { | |
result.groups = new Proxy(result.groups, handler); | |
} | |
return result; | |
} | |
} | |
let re = new ProxiedGroupRegExp("(?<x>.)"); | |
assertEquals("a z", "a".replace(re, "$<x> $<y>")); | |
assertEquals(["x", "y"], access_log); |