// Copyright 2017 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: > Function argument to String.prototype.replace gets groups as the last argument esid: sec-regexp.prototype-@@replace features: [regexp-named-groups] info: | RegExp.prototype [ @@replace ] ( string, replaceValue ) 14. Repeat, for each result in results, j. Let namedCaptures be ? Get(result, "groups"). k. If functionalReplace is true, then iv. If namedCaptures is not undefined, 1. Append namedCaptures as the last element of replacerArgs. ---*/ let source = "(?.)(?.)"; let alternateSource = "(?.)|(?.)"; for (let flags of ["", "u"]) { let i = 0; let re = new RegExp(source, flags); let result = "abcd".replace(re, (match, fst, snd, offset, str, groups) => { assert.sameValue(i++, 0); assert.sameValue("ab", match); assert.sameValue("a", groups.fst); assert.sameValue("b", groups.snd); assert.sameValue("a", fst); assert.sameValue("b", snd); assert.sameValue(0, offset); assert.sameValue("abcd", str); return `${groups.snd}${groups.fst}`; }); assert.sameValue("bacd", result); assert.sameValue(i, 1); let re2 = new RegExp(alternateSource, flags); assert.sameValue("undefinedbcd", "abcd".replace(re2, (match, fst, snd, offset, str, groups) => groups.snd)); }