import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?<=^|[\\n;](?:[\\t ]*(?:\\w+ )?)?)(?:(?:const\\s*|let\\s*|var\\s*)?(?<imports>(?:[$_\\p{ID_Start}][$\\u200C\\u200D\\p{ID_Continue}]*)|(?<=const\\s*|let\\s*|var\\s*)(?:[\\w\\t\\n\\r \"$'*,./:\\{\\}-]+?))\\s*=\\s*)?(?:await\\s+)?(?<expression>import\\((?<specifier>[\\S\\t\\n\\r]+?)(?:,\\s*(?<options>\\{\\s*assert:.+[\\w\\t\\n\\r \"':]+\\}\\s*\\}))?\\))";
final String string = "await import(foo)\n"
+ "await import('foo')\n"
+ "const foo = await import('bar')\n"
+ "const foo = await import(bar)\n"
+ "const promise = import('./foo');\n"
+ "const { readPackage } = await import('read-pkg')\n"
+ "const { \n"
+ " readPackageUp,\n"
+ " readPackageUpSync\n"
+ "} = await import('read-pkg');\n"
+ "const {\n"
+ " addFive,\n"
+ " addFour,\n"
+ " addThree,\n"
+ " addTwo,\n"
+ " squareFive,\n"
+ " squareFour,\n"
+ " squareThree,\n"
+ " squareTwo\n"
+ "} = await import('./lib')\n"
+ "await import('buzz').then(() => console.log(res)).catch(() => ({}))\n"
+ "var g;const{foo}=await import('bar');const{ foo }=await import('bar')\n"
+ "import('buzz').then(() => console.log(res)).catch(() => ({}))\n"
+ "import('buzz').then(() => console.log(res)).catch(() => ({}))\n\n"
+ "import('buzz').catch(() => ({}))\n\n"
+ "const foo = \"./utils.mjs\"; await import(foo)\n\n"
+ "const { default: barData } =\n"
+ " await import('./bar.json');\n\n"
+ "const { default: barData } =\n"
+ " await import('./bar.json', { assert: { type: 'json' } });\n\n"
+ "(async () => {\n"
+ " if (somethingIsTrue) {\n"
+ " // import module for side effects\n"
+ " await import(\"/modules/my-module.js\");\n"
+ " }\n"
+ "})();\n\n"
+ "await import('__tests__/report.json', { \n"
+ " assert: { type: 'json' }\n"
+ "})\n\n"
+ " await import('__tests__/report.json', {\n"
+ " assert: { type: 'json' }\n"
+ " })\n\n"
+ "(async () => {\n"
+ " if (somethingIsTrue) {\n"
+ " const {\n"
+ " default: myDefault,\n"
+ " foo,\n"
+ " bar,\n"
+ " } = await import(\"/modules/my-module.js\");\n"
+ " }\n"
+ "})();\n\n"
+ "const main = document.querySelector(\"main\");\n"
+ "for (const link of document.querySelectorAll(\"nav > a\")) {\n"
+ " link.addEventListener(\"click\", (e) => {\n"
+ " e.preventDefault();\n\n"
+ " import(\"/modules/my-module.js\")\n"
+ " .then((module) => {\n"
+ " module.loadPageInto(main);\n"
+ " })\n"
+ " .then((module) => {\n"
+ " module.loadPageInto(main);\n"
+ " })\n"
+ " .then((module) => {\n"
+ " module.loadPageInto(main);\n"
+ " })\n"
+ " .catch((err) => {\n"
+ " main.textContent = err.message;\n"
+ " });\n"
+ " });\n"
+ "}\n\n"
+ "let myModule;\n\n"
+ "if (typeof window === \"undefined\") {\n"
+ " myModule = await import(\"module-used-on-server\");\n"
+ "} else {\n"
+ " myModule = await import(\"module-used-in-browser\");\n"
+ "}\n\n"
+ "Promise.all(\n"
+ " Array.from({ length: 10 }).map((_, index) =>\n"
+ " import(`/modules/module-${index}.js`)\n"
+ " )\n"
+ ").then((modules) => modules.forEach((module) => module.load()));\n\n"
+ " Array.from({ length: 10 }).map((_, index) => {\n"
+ " return import(`/modules/module-${index}.js`)\n"
+ " })\n\n"
+ "'await import(\"foo\")'\n"
+ "\"await import('foo')\"\n\n"
+ "// await import('foo')\n\n"
+ "/**\n"
+ " * @example\n"
+ " * const { readPackageUp } = await import('read-pkg')\n"
+ " */\n";
final Pattern pattern = Pattern.compile(regex, Pattern.UNICODE_CASE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html