const regex = new RegExp('\\(\\?\\(DEFINE\\)(?<definition>(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\(\\?\\<(?<name>[\\w-[0-9]]\\w*?)\\>(?<content>(?#internals shallow)(?:(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\[(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])(?:\\\\\\[|\\\\\\])|[^\\[\\]])*(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\])|(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\(\\?(?:\\!|\\=|\\:|\\<\\!|\\<\\=)(?#internals deep)(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])(?:\\\\\\(|\\\\\\)|\\\\\\[|\\\\\\])|[^\\(\\)\\[\\]])+(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\))|(?:(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])(?:\\\\\\(|\\\\\\)|\\\\\\[|\\\\\\])|[^\\(\\)\\[\\]]))+)(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\))*(?<=(?:[^\\\\](?:\\\\\\\\)+)|[^\\\\])\\)', 'g')
const str = `(?(DEFINE)(?<internal_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\"\\?\\<\\>\\|])(?<external_filesc_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\"\\?\\<\\>\\|\\s])(?<external_folderesc_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\"\\?\\<\\>\\|\\s\\.])(?<folder_name_s>\\g'external_filesc_name_char_s'\\g'internal_name_char_s'{1,258}\\g'external_filesc_name_char_s'|\\g'external_folderesc_name_char_s'\\g'external_filesc_name_char_s'|\\g'external_filesc_name_char_s'\\g'external_folderesc_name_char_s'|\\g'external_folderesc_name_char_s')(?<extension_char_s>[a-z0-9])(?<extension_s>\\g'extension_char_s'{1,260})(?<file_name_s>(?:\\g'external_filesc_name_char_s'\\g'internal_name_char_s'{1,258}\\g'external_filesc_name_char_s'|\\g'external_filesc_name_char_s'{1,2})(?=\\.\\g'extension_s'\\Z))(?<ipv4_number_s>(?:[12]\\d\\d)|(?:\\d\\d)|(?:\\d))(?<ipv4_s>(?:\\g'ipv4_number_s'\\.){3}\\g'ipv4_number_s'(?:\\:\\d+)?)(?<named_drive_root_s>[a-z]\\:\\/)(?<file_protocol_root_s>file\\:\\/\\/\\/\\g'named_drive_root_s')(?<smb_root_s>\\/\\/)(?<hyper_text_root_s>https?\\:\\/\\/))(?#definition is complete)\\A(?!\\Z)(?<all_until_last_name>(?<root>(?<fixed_root>\\/|\\g'named_drive_root_s'|\\g'file_protocol_root_s'|(?<remote_root>\\g'smb_root_s'|\\g'hyper_text_root_s')(?:(?<ipv4>\\g'ipv4_s')(?:\\/(?!\\Z)|))?)|(?<relative_root>\\.{1,2}\\/(?:\\.\\.\\/)*))?(?<body>(?:\\g'folder_name_s'\\/)*?))(?<last_folder_or_file_name>(?<file_full_name>(?<file_short_name>\\g'file_name_s')\\.(?:(?<shortcut_extension>lnk)|(?<remote_extension>url)|(?<general_extension>\\g'extension_s'))(?!\\/))|(?:(?<folder_name>\\g'folder_name_s')\\/?))?\\Z`;
// 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