const regex = /# ./configure parser
^(?:
(?:configuring[[:space:]]for[[:space:]](.+))
|
(?:
checking[[:space:]]
(?:
(?:build|host)
[[:space:]]system[[:space:]]type
|
how[[:space:]]to[[:space:]](.+?)
|
for[[:space:]](.+?)
|
whether[[:space:]](?:to[[:space:]])?(.+?)
)[\.]{3}
)
(?:
[[:space:]]+
(?:
$
|
(?:
(yes)
|
(no)
|
(?<!^)(.*)(?=$|\n)
)
)
)?.*
)$
# ^(?:(?:configuring[[:space:]]for[[:space:]](.+))|(?:checking[[:space:]](?:(?:build|host)[[:space:]]system[[:space:]]type|how[[:space:]]to[[:space:]](.+?)|for[[:space:]](.+?)|whether[[:space:]](?:to[[:space:]])?(.+?))[\.]{3})(?:[[:space:]]+(?:$|(?:(yes)|(no)|(?<!^)(.*)(?=$|\n))))?.*)$/gmi;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('# .\/configure parser
^(?:
(?:configuring[[:space:]]for[[:space:]](.+))
|
(?:
checking[[:space:]]
(?:
(?:build|host)
[[:space:]]system[[:space:]]type
|
how[[:space:]]to[[:space:]](.+?)
|
for[[:space:]](.+?)
|
whether[[:space:]](?:to[[:space:]])?(.+?)
)[\\.]{3}
)
(?:
[[:space:]]+
(?:
$
|
(?:
(yes)
|
(no)
|
(?<!^)(.*)(?=$|\\n)
)
)
)?.*
)$
# ^(?:(?:configuring[[:space:]]for[[:space:]](.+))|(?:checking[[:space:]](?:(?:build|host)[[:space:]]system[[:space:]]type|how[[:space:]]to[[:space:]](.+?)|for[[:space:]](.+?)|whether[[:space:]](?:to[[:space:]])?(.+?))[\\.]{3})(?:[[:space:]]+(?:$|(?:(yes)|(no)|(?<!^)(.*)(?=$|\\n))))?.*)$', 'gmi')
const str = `configuring for zsh 5.7.1-test-2
checking build system type... x86_64-apple-darwin17.7.0
checking host system type... x86_64-apple-darwin17.7.0
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking how to run the C preprocessor... gcc -E
checking for an ANSI C-conforming const... yes
checking for gcc option to accept ANSI C...
checking whether to use prototypes... yes
checking for grep that handles long lines and -e... /usr/local/bin/ggrep
checking for egrep... /usr/local/bin/ggrep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for size_t... yes
checking for working alloca.h... yes`;
// 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