You wrote a regular expression and it is not catching what it should. Type the pattern above and the matches appear as you type — highlighted inside your test string, and listed underneath with the position each one starts at and the text of every capture group.
Below that the pattern is taken apart and each piece is explained in plain words, indented to show what sits inside which group. Anything the breakdown could not work out is labelled could not be parsed rather than passed off as understood; and when the engine rejects a pattern while the breakdown found nothing to complain about, it says so instead of showing a tidy explanation of a broken pattern.
Everything happens in the page. The matching is done by your own browser's regular expression engine, so neither the pattern nor the text you test it against is sent anywhere.
m changes what ^ and $ mean,
s changes what . means, and u turns on
\p{...}.
The pattern (\w+)@(\w+)\.(\w+) with the g flag, against:
write to ann@example.com or bob@test.org
gives two matches — ann@example.com at index 9 and
bob@test.org at index 28 — each with three capture groups: the name,
the domain and the suffix.