Social Mention Extractor – Pull Every @Handle Out of Any Text
Paste a caption, a draft post, a comment export or a thread you copied from somewhere else, and this social mention extractor gives you back every @mention in it — de-duplicated, counted, ordered and ready to copy out in whatever shape you need. The whole job happens in your browser. Nothing is uploaded, nothing is stored, and no network request of any kind is made. The tool reports what is in your text; it never checks whether an account exists, because it has no way to.
The email rule that most extractors get wrong
The obvious pattern, @[A-Za-z0-9_]+, turns user@example.com into a mention of @example. That single bug is the reason to use a real parser instead. Two separate rules stop it here. First, a marker only opens a handle when the character immediately before it is not part of a handle body, so the r in user blocks the @ outright — the same rule that keeps a@b and id@3 out of the list. Second, the whole address is marked as a protected stretchbefore matching begins, which is why the preview dims user@example.com end to end rather than only from the @ onward. Longer shapes such as first.last+tag@sub.example.co.uk are covered the same way, and so are web addresses: https://x.example/@nasa yields nothing, because the handle there belongs to a path.
A grammar that works in every script
The handle body is built from Unicode property escapes rather than an ASCII character class, so @東京, @новости, @مرحبا and @हिंदी are read correctly, with combining marks kept attached to their base letter. The fullwidth @ that is ordinary in Japanese, Chinese and Korean text is a marker, as is the small ﹫, and the handle is copied back out with the exact marker you typed. Letter lookalikes such as а are never markers — a letter is a letter. Where a platform genuinely restricts handles to ASCII, that belongs in the rules panel as a check, not in the parser, where it would simply lose handles.
Where a handle stops
A dot or a hyphen joins the handle only when it sits between two handle characters. So @jane.doe stays whole, while @jane. reads as @jane and Hi @bob- reads as @bob — the trailing mark is the sentence's punctuation, not part of the name. Slashes, hashes, quotes and brackets end a handle outright, which is why @nasa/jpl is @nasa and @bob#1 is @bob. A run of markers collapses and the handle is read after the last one, so @@nasa is @nasa. Emoji are never handle characters, with no toggle to make them so.
Counting, grouping and order
@NASA, @nasa and @Nasa are one row counted three times. The key used for matching is normalised to NFC and lower-cased against a pinned locale, so the result cannot change between machines, and the spelling shown is always the first one you typed with the alternates listed underneath. Lengths are counted in grapheme clusters — what a reader would call a character — rather than in code units. All three sort orders are total orders, with first appearance breaking every tie, so the same text always produces the same list.
Rules you set, and nothing you did not
The profile panel checks handles against a character class and a length range that you control. It ships permissive, validates nothing until you choose otherwise, and never removes a row: a handle that breaks a rule is still listed, flagged with the rule it broke. No profile carries a platform name or a guessed limit, because none could be verified when this tool was built. A badge here means only that the text matches the grammar you selected — never that a handle is registered, available, or owned by anyone in particular.