From 6a9d2538e053942e20b9f9caad557f13d6e60d68 Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Sat, 27 Jul 2019 06:53:22 +0800 Subject: [PATCH] fix capturing group for matchAll (#10136) * fix capturing group for matchAll * update test case * add core-js/features/string/match-all to test --- packages/babel-helpers/src/helpers.js | 9 +++++---- .../package.json | 3 ++- .../fixtures/runtime/match-all-corejs/exec.js | 16 ++++++++++++++++ .../test/fixtures/runtime/match-all/exec.js | 14 ++++++++++++++ .../test/fixtures/runtime/match-all/options.json | 3 +++ 5 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all-corejs/exec.js create mode 100644 packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all/exec.js create mode 100644 packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/match-all/options.json diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 527b24c330..b9eef50955 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 3de8ee6199..dc95a58d86 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 0000000000..321c2557ff --- /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 0000000000..975a485204 --- /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 0000000000..22b476c4bb --- /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" +}