From 2e7bea4a6abdea0d99c70bbb28b4889df58223d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Thu, 5 Sep 2019 11:35:57 -0400 Subject: [PATCH] fix: transform name capturing regex once (#10395) * fix: transform name capturing regex once * refactor: early return when pattern contains only lookbehind * chore: simplify test regex * chore: run test on >=8.0.0 --- .../src/index.js | 2 +- .../test/fixtures/runtime/issue-10393/exec.js | 7 +++++++ .../test/fixtures/runtime/issue-10393/options.json | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/issue-10393/exec.js create mode 100644 packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/issue-10393/options.json diff --git a/packages/babel-plugin-transform-named-capturing-groups-regex/src/index.js b/packages/babel-plugin-transform-named-capturing-groups-regex/src/index.js index 042d16de9d4d..d646101852e0 100644 --- a/packages/babel-plugin-transform-named-capturing-groups-regex/src/index.js +++ b/packages/babel-plugin-transform-named-capturing-groups-regex/src/index.js @@ -12,7 +12,7 @@ export default function({ types: t }, options) { visitor: { RegExpLiteral(path) { const node = path.node; - if (node.pattern.indexOf("(?<") === -1) { + if (!/\(\?<(?![=!])/.test(node.pattern)) { // Return early if there are no named groups. // The .indexOf check may have false positives (e.g. /\(?[a])/ + +const result = regex.exec("aa"); + +expect(result.groups).toEqual({ + a: "a" +}); diff --git a/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/issue-10393/options.json b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/issue-10393/options.json new file mode 100644 index 000000000000..2454c2169cf8 --- /dev/null +++ b/packages/babel-plugin-transform-named-capturing-groups-regex/test/fixtures/runtime/issue-10393/options.json @@ -0,0 +1,3 @@ +{ + "minNodeVersion": "8.0.0" +}