babel-plugin-transform-modern-regexp icon indicating copy to clipboard operation
babel-plugin-transform-modern-regexp copied to clipboard

Implement runtime support

Open DmitrySoshnikov opened this issue 8 years ago • 3 comments

NOTE: this is mostly for spec-compatibility; practically regexes can be used without runtime

As the comments says, a transform can accept includeRuntime option (which is currently disabled).

If the option is passed, regexes are wrapped into RegExpTree wrapper, and provide extra functionality at runtime (e.g. accessing captured named groups on matched result).

The runtime implementation already exists, we need to pull it into a separate package, which can be auto-required by the transform.

const re = new RegExp(`

  # A regular expression for date.

  (?<year>\\d{4})-    # year part of a date
  (?<month>\\d{2})-   # month part of a date
  (?<day>\\d{2})      # day part of a date

`, 'x');

const result = re.exec('2017-04-17');

console.log(result.groups.year); // 2017

Is translated into:

// Auto-require `regexp-tree-runtime`, it should be in the dependencies.

const RegExpTree = require('regexp-tree-runtime');

...

const re = new RegExpTree(/(\d{4})-(\d{2})-(\d{2})/, {
  flags: 'x',
  source: <original-source>,
  groups: {
    year: 1,
    month: 2,
    day: 3,
  },
});

const result = re.exec('2017-04-17');

console.log(result.groups.year); // 2017

DmitrySoshnikov avatar Apr 17 '17 17:04 DmitrySoshnikov

Is this still the latest on this issue? Named capture groups would be a game changer for me, and I can try to find time to work on this if it's still the preferred strategy.

mike-marcacci avatar May 22 '18 03:05 mike-marcacci

@mike-marcacci, yes, would be great to add this, and I agree, actual usage of the groups is a game changer. We can discuss any strategy here, those described above are just an example, I'm happy to consider any alternatives you have. And of course I'll appreciate a PR.

CC @nicolo-ribaudo who was trying to add a PR to Babel, but the https://github.com/babel/babel/pull/7105 PR itself seems stuck there forever, so we can add it here.

DmitrySoshnikov avatar May 22 '18 05:05 DmitrySoshnikov

Yeah sorry, currently I'm working on decorators which are a more requested feature. I will revisit that PR after them.

nicolo-ribaudo avatar May 22 '18 06:05 nicolo-ribaudo