All of these should be building on top of RegExp.escape :P
From: es-discuss [mailto:[email protected]] On Behalf Of Mark S.
Miller
Sent: Saturday, June 13, 2015 02:39
To: C. Scott Ananian
Cc: Benjamin Gruenbaum; es-discuss
Subject: Re: RegExp.escape()
The point of this last variant is that data gets escaped but RegExp objects do
not -- allowing you to compose RegExps: re`${re1}|${re2}*|${data}`
But this requires one more adjustment:
>
> function re(first, ...args) {
> let flags = first;
> function tag(template, ...subs) {
> const parts = [];
> const numSubs = subs.length;
> for (let i = 0; i < numSubs; i++) {
> parts.push(template.raw[i]);
> const subst = subs[i] instanceof RegExp ?
`(?:${subs[i].source})` :
> subs[i].replace(/[\/\\^$*+?.()|[\]{}]/g, '\\amp;');
> parts.push(subst);
> }
> parts.push(template.raw[numSubs]);
> return RegExp(parts.join(''), flags);
> }
> if (typeof first === 'string') {
> return tag;
> } else {
> flags = void 0; // Should this be '' ?
> return tag(first, ...args);
> }
> }
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss