mirror of https://github.com/tc39/test262.git
44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
// 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 = "(?<fst>.)(?<snd>.)";
|
|
let alternateSource = "(?<fst>.)|(?<snd>.)";
|
|
|
|
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));
|
|
}
|