const regex = /(?:-|(?P<real_ip>[\-\da-f.:]+))\s+\[(?P<remote_ip>[\da-f.:]+)\]\s+[\w\.\-]+\s+(?<remote_user>\S+)\s+\[(?<timestamp>[^\]]+)\]\s+"(?:\-|(?<request>\w+) (?<request_uri>[^ \?]+)(?:\?(?<request_uri_query>[^ ]*))? (?<request_version>[\w\/\.]+))"\s+(?P<status>[1-9]\d{2})\s+(?P<body_bytes_sent>\d+)\s+"(?<http_referer>[^"]+)"\s+"(?<http_user_agent>[^"]+)"\s+\[(?:\-|(?P<upstream_response_time>\d+(?:.\d+)?))\s+(?P<request_time>\d+(?:.\d+)?)\]/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?:-|(?P<real_ip>[\\-\\da-f.:]+))\\s+\\[(?P<remote_ip>[\\da-f.:]+)\\]\\s+[\\w\\.\\-]+\\s+(?<remote_user>\\S+)\\s+\\[(?<timestamp>[^\\]]+)\\]\\s+"(?:\\-|(?<request>\\w+) (?<request_uri>[^ \\?]+)(?:\\?(?<request_uri_query>[^ ]*))? (?<request_version>[\\w\\\/\\.]+))"\\s+(?P<status>[1-9]\\d{2})\\s+(?P<body_bytes_sent>\\d+)\\s+"(?<http_referer>[^"]+)"\\s+"(?<http_user_agent>[^"]+)"\\s+\\[(?:\\-|(?P<upstream_response_time>\\d+(?:.\\d+)?))\\s+(?P<request_time>\\d+(?:.\\d+)?)\\]', 'gm')
const str = `0.0.0.0 [192.168.255.53] - - [11/Aug/2020:06:25:22 +0000] "GET /monitoring/health/ HTTP/1.1" 200 0 "-" "-" [0.000 0.005]
- [192.168.255.53] - - [11/Aug/2020:06:25:22 +0000] "GET /monitoring/health/ HTTP/1.1" 200 0 "-" "-" [0.000 0.005]`;
// 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