^start of line
\s*a Unicode whitespace character, repeated any number of times
\na line-feed (newline) character (ASCII 10)
Negative Lookahead(?!.* has (?:joined|left) the conversation|\* \* \*) 1st Alternative.* has (?:joined|left) the conversation .*any Unicode character (except for line terminators), repeated any number of times
has the literal text has (case sensitive) Non-Capturing Group(?:joined|left) joinedthe literal text joined (case sensitive) leftthe literal text left (case sensitive) the conversationthe literal text the conversation (case sensitive) \*the literal * (4210 / 528 / 2A16)
the literal (3210 / 408 / 2016)
\*the literal * (4210 / 528 / 2A16)
the literal (3210 / 408 / 2016)
\*the literal * (4210 / 528 / 2A16)
\Sany character that is not Unicode whitespace
.*any Unicode character (except for line terminators), repeated any number of times
Group 1((?:\n(?!\(\d|---).*)*) Non-Capturing Group(?:\n(?!\(\d|---).*)* *repeats the group contents below any number of times:
\na line-feed (newline) character (ASCII 10)
Negative Lookahead(?!\(\d|---) \(the literal ( (4010 / 508 / 2816)
\da Unicode decimal digit
.*any Unicode character (except for line terminators), repeated any number of times
g modifier: global. Finds all matches instead of stopping after the first
m modifier: multiline. Causes ^ and $ to match the start and end of each line, not only the start and end of the string