Non-Capturing Group(?: # non-capturing group
\#summertime\b # match #summertime
| # or
\G(?<!^), # a comma not at the beginning of string and match it only if it's after the last match
) 1st Alternative # non-capturing group
\#summertime\b # match #summertime
Comment: non-capturing group
\#the literal # (3510 / 438 / 2316)
summertimethe literal text summertime (case sensitive) \ban ASCII word boundary
Comment: match #summertime
2nd Alternative # or
\G(?<!^), # a comma not at the beginning of string and match it only if it's after the last match
Comment: or
\Gstart of current search
Negative Lookbehind(?<!^) Comment: a comma not at the beginning of string and match it only if it's after the last match
Comment: closing the non-capturing group
\s*any whitespace character, repeated any number of times
Comment: some optional whitespaces
\Kresets the starting point of the reported match. Any previously consumed characters are no longer included in the final match
Comment: forget what we matched so far
Negated Character Class[^\s,]+ +matches at least one character outside the set below:
\sany whitespace character
,the literal , (4410 / 548 / 2C16)
Comment: match anything that's not a whitespace nor a comma one or more times
g modifier: global. Finds all matches instead of stopping after the first
x modifier: extended. Ignores unescaped whitespace and comments outside character classes