const 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*\}))?\))/gu;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<=^|[\\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*\\}))?\\))', 'gu')
const str = `await import(foo)
await import('foo')
const foo = await import('bar')
const foo = await import(bar)
const promise = import('./foo');
const { readPackage } = await import('read-pkg')
const {
readPackageUp,
readPackageUpSync
} = await import('read-pkg');
const {
addFive,
addFour,
addThree,
addTwo,
squareFive,
squareFour,
squareThree,
squareTwo
} = await import('./lib')
await import('buzz').then(() => console.log(res)).catch(() => ({}))
var g;const{foo}=await import('bar');const{ foo }=await import('bar')
import('buzz').then(() => console.log(res)).catch(() => ({}))
import('buzz').then(() => console.log(res)).catch(() => ({}))
import('buzz').catch(() => ({}))
const foo = "./utils.mjs"; await import(foo)
const { default: barData } =
await import('./bar.json');
const { default: barData } =
await import('./bar.json', { assert: { type: 'json' } });
(async () => {
if (somethingIsTrue) {
// import module for side effects
await import("/modules/my-module.js");
}
})();
await import('__tests__/report.json', {
assert: { type: 'json' }
})
await import('__tests__/report.json', {
assert: { type: 'json' }
})
(async () => {
if (somethingIsTrue) {
const {
default: myDefault,
foo,
bar,
} = await import("/modules/my-module.js");
}
})();
const main = document.querySelector("main");
for (const link of document.querySelectorAll("nav > a")) {
link.addEventListener("click", (e) => {
e.preventDefault();
import("/modules/my-module.js")
.then((module) => {
module.loadPageInto(main);
})
.then((module) => {
module.loadPageInto(main);
})
.then((module) => {
module.loadPageInto(main);
})
.catch((err) => {
main.textContent = err.message;
});
});
}
let myModule;
if (typeof window === "undefined") {
myModule = await import("module-used-on-server");
} else {
myModule = await import("module-used-in-browser");
}
Promise.all(
Array.from({ length: 10 }).map((_, index) =>
import(\`/modules/module-\${index}.js\`)
)
).then((modules) => modules.forEach((module) => module.load()));
Array.from({ length: 10 }).map((_, index) => {
return import(\`/modules/module-\${index}.js\`)
})
'await import("foo")'
"await import('foo')"
// await import('foo')
/**
* @example
* const { readPackageUp } = await import('read-pkg')
*/
`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
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 JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions