const regex = /# Time:\s(?<timestamp>.*)\n#.*Id:\s(?<id>.*)\n#\sQuery_time:\s(?<duration>[\d.]*)\s.*time:\s(?<lock_time>[\d.]*)\s.*_sent:\s(?<returned>\d*)\s.*_examined:\s(?<searched>\d*)\n(?<sql>[\s\S]*)/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('# Time:\\s(?<timestamp>.*)\\n#.*Id:\\s(?<id>.*)\\n#\\sQuery_time:\\s(?<duration>[\\d.]*)\\s.*time:\\s(?<lock_time>[\\d.]*)\\s.*_sent:\\s(?<returned>\\d*)\\s.*_examined:\\s(?<searched>\\d*)\\n(?<sql>[\\s\\S]*)', 'gm')
const str = `
# Time: 210607 16:27:16
# User@Host: doctime_db_usr[doctime_db_usr] @ [10.2.0.79] Id: 13021
# Query_time: 20.504504 Lock_time: 0.000233 Rows_sent: 52 Rows_examined: 13827347
SET timestamp=1623083236;
SELECT
substring( substring_index( uri, '/', -1 ) , 1, LENGTH(substring_index( uri, '/', -1 )) - 38 ) AS uri,
namespace,
method,
count(*) AS hits
FROM
user_hits
WHERE
namespace = 'hospitals' AND
controller = 'queue' AND
method = 'file'
GROUP BY
substring( substring_index( uri, '/', -1 ) , 1, LENGTH(substring_index( uri, '/', -1 )) - 38 )
UNION
SELECT
uri,
namespace,
method,
count(*) AS hits
FROM
user_hits
WHERE
uri LIKE '%export%'
GROUP BY
method
ORDER BY hits DESC;
`;
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