use strict;
my $str = 'export { name1, /* */ nameN };
export { variable1 as name1, variable2 as name2, /* */ nameN };
export { variable1 as "string name" };
export { name1 as default /*, */ };
export type { CompilerOptionsJson as default };
export { default }
export {
DEFAULTS,
plugin as default,
type Options
}
export type { Config, Result }
export type { default as Options }
export { default } from \'./make\'
export {
DEFAULTS,
plugin as default,
type Options
} from \'./plugin\'
export type { Config, Result } from \'./interfaces\'
export type { default as Options } from \'./options\'
var g;export{name1};export{name1}
var g;export{name1}; export{name1}
export { name1, /* */ nameN }
export { import1 as ", import2 as name2, /* */ nameN }
export { default, /* */ }
export { default } from \'./make\'
export {
DEFAULTS,
plugin as default,
type Options
} from \'./plugin\'
export type { Config, Result } from \'./interfaces\'
export type { default as Options } from \'./options\'
// export { default }
// export type { default as Statement }
/**
* @example
* export { default }
* export { Config, Result }
* export type { default as Options }
*/
export { default, /* */ }';
my $regex = qr/(?<=^|[\n;](?:[\t ]*(?:\w+ )?)?)export(?:(?:\s+(?<type>type)\s*)|\s*)(?<exports>{[\w\t\n\r "$'*,./{}-]+?})(?=;?[\t\n;]*?(?!(?:\n*\/\/)|(?:\n*\/\*)|(?:\s*from.*?)))/p;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html