const regex = /(?(DEFINE)(?'value'(?:\N*(?:\n(?:(?: {8}|\t)\N*))*)))\s*pool: (?'pool'\g'value')\n\s*state: (?'state'\g'value')\n((?:\s*status: (?'status'\g'value')\n)?(?:\s*action: (?'action'\g'value')\n)?\s*scan: (?'scan'\g'value')\n)?\s*config:\n\n(?'config'\g'value')\n\s*errors: (?'errors'\g'value')/s;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?(DEFINE)(?\'value\'(?:\\N*(?:\\n(?:(?: {8}|\\t)\\N*))*)))\\s*pool: (?\'pool\'\\g\'value\')\\n\\s*state: (?\'state\'\\g\'value\')\\n((?:\\s*status: (?\'status\'\\g\'value\')\\n)?(?:\\s*action: (?\'action\'\\g\'value\')\\n)?\\s*scan: (?\'scan\'\\g\'value\')\\n)?\\s*config:\\n\\n(?\'config\'\\g\'value\')\\n\\s*errors: (?\'errors\'\\g\'value\')', 's')
const str = ` pool: zfs
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
zfs ONLINE 0 0 0
ata-HGST_HTS725050A7E630_TF655AY92LL99L ONLINE 0 0 0
errors: No known data errors`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
if ((m = regex.exec(str)) !== null) {
// 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