diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 527b24c330ac..b9eef5095520 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -1891,16 +1891,17 @@ helpers.wrapRegExp = helper("7.2.6")` export default function _wrapRegExp(re, groups) { _wrapRegExp = function(re, groups) { - return new BabelRegExp(re, groups); + return new BabelRegExp(re, undefined, groups); }; var _RegExp = wrapNativeSuper(RegExp); var _super = RegExp.prototype; var _groups = new WeakMap(); - function BabelRegExp(re, groups) { - var _this = _RegExp.call(this, re); - _groups.set(_this, groups); + function BabelRegExp(re, flags, groups) { + var _this = _RegExp.call(this, re, flags); + // if the regex is recreated with 'g' flag + _groups.set(_this, groups || _groups.get(re)); return _this; } inherits(BabelRegExp, _RegExp); diff --git a/packages/babel-plugin-transform-named-capturing-groups-regex/package.json b/packages/babel-plugin-transform-named-capturing-groups-regex/package.json index 3de8ee619969..dc95a58d86e8 100644 --- a/packages/babel-plugin-transform-named-capturing-groups-regex/package.json +++ b/packages/babel-plugin-transform-named-capturing-groups-regex/package.json @@ -21,6 +21,7 @@ }, "devDependencies": { "@babel/core": "^7.4.5", - "@babel/helper-plugin-test-runner": "^7.0.0" + "@babel/helper-plugin-test-runner": "^7.0.0", + "core-js-pure": "^3.0.0" } } diff --git a/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all-corejs/exec.js b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all-corejs/exec.js new file mode 100644 index 000000000000..321c2557ffa9 --- /dev/null +++ b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all-corejs/exec.js @@ -0,0 +1,16 @@ +require('core-js/features/string/match-all.js'); + +const string = "Favorite GitHub repos: tc39/ecma262 v8/v8.dev"; +const regex = /\b(?[a-z0-9]+)\/(?[a-z0-9\.]+)\b/g; + +const matches = string.matchAll(regex); + +expect(matches.next().value.groups).toEqual({ + owner: "tc39", + repo: "ecma262", +}); + +expect(matches.next().value.groups).toEqual({ + owner: "v8", + repo: "v8.dev", +}); diff --git a/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all/exec.js b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all/exec.js new file mode 100644 index 000000000000..975a485204bb --- /dev/null +++ b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all/exec.js @@ -0,0 +1,14 @@ +const string = "Favorite GitHub repos: tc39/ecma262 v8/v8.dev"; +const regex = /\b(?[a-z0-9]+)\/(?[a-z0-9\.]+)\b/g; + +const matches = string.matchAll(regex); + +expect(matches.next().value.groups).toEqual({ + owner: "tc39", + repo: "ecma262", +}); + +expect(matches.next().value.groups).toEqual({ + owner: "v8", + repo: "v8.dev", +}); diff --git a/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all/options.json b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all/options.json new file mode 100644 index 000000000000..22b476c4bb57 --- /dev/null +++ b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all/options.json @@ -0,0 +1,3 @@ +{ + "minNodeVersion": "12.0.0" +}