Remove Emojis

Strip emoji out of a chat log or a caption — whole, including the flags, keycaps, skin tones and family sequences that a naive filter tears in half.

Runs 100% in your browserNothing is uploaded to a serverInstant results

Options

Also clean up

Each of these runs the same code as its own page. The full set, all switched on at once, is the text cleaner.

Input

Result

Copied!

Before and after

0
Characters in
0
Characters out
0
Characters removed
0
Words in → out

An emoji is a cluster, not a character

This is why the regex you found on Stack Overflow leaves a mess behind. A single emoji on screen is very often several codepoints glued together. 👍🏽 is a thumbs-up followed by a skin-tone modifier. 👨‍👩‍👧 is three people joined by two zero-width joiners. 🇬🇧 is a pair of regional indicator letters, G and B, that a font draws as one flag. 1️⃣ is the digit one, a variation selector and a combining keycap. Delete these one codepoint at a time and you get orphaned joiners, a lone skin tone, half a flag rendering as two letters, and a stray digit where a keycap used to be.

The matcher on this page removes the whole cluster in one go. It is built around Unicode's Extended_Pictographic property — the property that actually means “this is an emoji-ish character”, rather than a hand-maintained list of ranges that goes out of date every September — plus the grammar around it: optional variation selector, optional skin tone, any number of joined sequences, regional indicator pairs, and keycaps. Anything left over, such as a joiner or a variation selector stranded by an earlier edit, is swept up too, because those render as nothing at all and still break string comparison.

The first checkbox exists because Extended_Pictographic is broader than the emoji keyboard. ©, ®, ™, ❗, ℹ and a stack of arrows and shapes are in it, but in running prose they are ordinary typography, and deleting the © off a footer line is not what anyone asked for. With keep text-style symbols on, those characters survive when they appear on their own, and are still removed when they carry the emoji presentation selector that turns them into a coloured glyph.

The second checkbox goes the other way. ✓, ➜, ⚑ and the rest of the dingbats are Unicode symbols rather than pictographs, so they are left alone by default. Tick it when you are cleaning a document where the check marks and arrows are decoration rather than content. Everything runs in your browser — a chat export or a customer message is not uploaded anywhere.

A message copied out of a chat app

Pasted in
Team photo from Friday 👨‍👩‍👧 — we shipped in 🇬🇧 © 2024
Comes out
Default settings:
Team photo from Friday  — we shipped in  © 2024
(the family goes as one unit, the flag as one unit, the © stays)

Emojis questions

Why did the whole flag disappear rather than half of it?

Because a flag is two regional indicator characters and the matcher takes them as a pair. 🇬🇧 is the letters G and B in a special alphabet that fonts draw as a single flag glyph. A filter working one codepoint at a time removes one of them and leaves the other, which then renders as a lone boxed letter. The same reasoning covers family and profession emoji, which are several people joined by zero-width joiners.

Does it remove ©, ® and ™?

Not by default. Those characters carry Unicode's Extended_Pictographic property, so a strict emoji filter does take them, but in ordinary text they are typography rather than emoji and removing them from a copyright line is almost never the intent. The “keep text-style symbols” checkbox protects them when they stand alone, while still removing the emoji-presentation versions. Untick it if you want a strictly pictograph-free result.

What about check marks and arrows like ✓ and ➜?

They stay unless you tick “also remove dingbats and other symbols”. Those characters are Unicode symbols, not pictographs — they predate emoji, they are usually monochrome, and they turn up in bullet lists and documentation as content rather than decoration. Keeping them separate means you can strip a chat log of emoji without flattening a spec document's checklists.