Where other methods are not available, you can use the following regex (for Unicode 11.0 emoji). For clarity, it escapes all characters that can be invisible or are non-spacing -- otherwise you see some odd constructions like ([♀♂])?+ that are really (\\x{200D}[♀♂]\\x{FE0F})?+.
([©®‼⁉™ℹ↔-↙↩-↪⌨⏏⏭-⏯⏱-⏲⏸-⏺Ⓜ▪-▫▶◀◻-◼☀-☄☎☑☘☠☢-☣☦☪☮-☯☸-☺♀♂♟-♠♣♥-♦♨♻♾⚒⚔-⚗⚙⚛-⚜⚠⚰-⚱⛈⛏⛑⛓⛩⛰-⛱⛴⛷-⛸✂✈-✉✏✒✔✖✝✡✳-✴❄❇❣-❤➡⤴-⤵⬅-⬇〰〽㊗㊙🅰-🅱🅾-🅿🈂🈷🌡🌤-🌬🌶🍽🎖-🎗🎙-🎛🎞-🎟🏍-🏎🏔-🏟🏵🏷🐿📽🕉-🕊🕯-🕰🕳🕶-🕹🖇🖊-🖍🖥🖨🖱-🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺🛋🛍-🛏🛠-🛥🛩🛰🛳]\\x{FE0F}|[☝✌-✍🕴🖐][\\x{FE0F}🏻-🏿]|[✊-✋🎅🏂🏇👂-👃👆-👐👦-👧👰👲👴-👶👸👼💃💅💪🕺🖕-🖖🙌🙏🛀🛌🤘-🤜🤞-🤟🤰-🤶🦵-🦶🧑-🧕]([🏻-🏿])?+|🇦[🇨-🇬🇮🇱-🇲🇴🇶-🇺🇼-🇽🇿]|🇧[🇦-🇧🇩-🇯🇱-🇴🇶-🇹🇻-🇼🇾-🇿]|🇨[🇦🇨-🇩🇫-🇮🇰-🇵🇷🇺-🇿]|🇩[🇪🇬🇯-🇰🇲🇴🇿]|🇪[🇦🇨🇪🇬-🇭🇷-🇺]|🇫[🇮-🇰🇲🇴🇷]|🇬[🇦-🇧🇩-🇮🇱-🇳🇵-🇺🇼🇾]|🇭[🇰🇲-🇳🇷🇹-🇺]|🇮[🇨-🇪🇱-🇴🇶-🇹]|🇯[🇪🇲🇴-🇵]|🇰[🇪🇬-🇮🇲-🇳🇵🇷🇼🇾-🇿]|🇱[🇦-🇨🇮🇰🇷-🇻🇾]|🇲[🇦🇨-🇭🇰-🇿]|🇳[🇦🇨🇪-🇬🇮🇱🇴-🇵🇷🇺🇿]|🇴🇲|🇵[🇦🇪-🇭🇰-🇳🇷-🇹🇼🇾]|🇶🇦|🇷[🇪🇴🇸🇺🇼]|🇸[🇦-🇪🇬-🇴🇷-🇹🇻🇽-🇿]|🇹[🇦🇨-🇩🇫-🇭🇯-🇴🇷🇹🇻-🇼🇿]|🇺[🇦🇬🇲-🇳🇸🇾-🇿]|🇻[🇦🇨🇪🇬🇮🇳🇺]|🇼[🇫🇸]|🇽🇰|🇾[🇪🇹]|🇿[🇦🇲🇼]|[\\#\\*0-9] \\x{FE0F} \\x{20E3}|🏳 \\x{FE0F}(\\x{200D}🌈)?+|[👯🤼🧞-🧟](\\x{200D}[♀♂]\\x{FE0F})?+|[⛹🏋-🏌🕵][\\x{FE0F}🏻-🏿](\\x{200D}[♀♂] \\x{FE0F})?+|[🏃-🏄🏊👮👱👳👷💁-💂💆-💇🙅-🙇🙋🙍-🙎🚣🚴-🚶🤦🤷-🤹🤽-🤾🦸-🦹🧖-🧝]((\\x{200D}[♀♂]\\x{FE0F}|[🏻-🏿](\\x{200D}[♀♂]\\x{FE0F})?+))?+|👁\\x{FE0F}(\\x{200D}🗨\\x{FE0F})?+|🏴((\\x{200D}☠\\x{FE0F}|\\x{E0067}\\x{E0062}((\\x{E0065} \\x{E006E}\\x{E0067} \\x{E007F}|\\x{E0073} \\x{E0063} \\x{E0074} \\x{E007F}| \\x{E0077} \\x{E006C} \\x{E0073} \\x{E007F}))))?+|👨(([🏻-🏿](\\x{200D}(([⚕-⚖✈]\\x{FE0F}|[🌾🍳🎓🎤🎨🏫🏭💻-💼🔧🔬🚀🚒🦰-🦳])))?+|\\x{200D}(([⚕-⚖✈] \\x{FE0F}|👦(\\x{200D}👦)?+|👧(\\x{200D}[👦-👧])?+|[👨-👩] \\x{200D}((👦(\\x{200D}👦)?+|👧(\\x{200D}[👦-👧])?+))|❤\\x{FE0F}\\x{200D}((💋\\x{200D}👨|👨))|[🌾🍳🎓🎤🎨🏫🏭💻-💼🔧🔬🚀🚒🦰-🦳]))))?+|👩(([🏻-🏿](\\x{200D}(([⚕-⚖✈]\\x{FE0F}|[🌾🍳🎓🎤🎨🏫🏭💻-💼🔧🔬🚀🚒🦰-🦳])))?+|\\x{200D}(([⚕-⚖✈]\\x{FE0F}|👦(\\x{200D}👦)?+|👧(\\x{200D}[👦-👧])?+|👩\\x{200D}((👦(\\x{200D}👦)?+|👧(\\x{200D}[👦-👧])?+))|❤\\x{FE0F}\\x{200D}((💋\\x{200D}[👨-👩]|[👨-👩]))|[🌾🍳🎓🎤🎨🏫🏭💻-💼🔧🔬🚀🚒🦰-🦳]))))?+|[⌚-⌛⏩-⏬⏰⏳◽-◾☔-☕♈-♓♿⚓⚡⚪-⚫⚽-⚾⛄-⛅⛎⛔⛪⛲-⛳⛵⛺⛽✅✨❌❎❓-❕❗➕-➗➰➿⬛-⬜⭐⭕🀄🃏🆎🆑-🆚🈁🈚🈯🈲-🈶🈸-🈺🉐-🉑🌀-🌠🌭-🌵🌷-🍼🍾-🎄🎆-🎓🎠-🏁🏅-🏆🏈-🏉🏏-🏓🏠-🏰🏸-🐾👀👄-👅👑-👥👪-👭👹-👻👽-💀💄💈-💩💫-📼📿-🔽🕋-🕎🕐-🕧🖤🗻-🙄🙈-🙊🚀-🚢🚤-🚳🚷-🚿🛁-🛅🛐-🛒🛫-🛬🛴-🛹🤐-🤗🤝🤠-🤥🤧-🤯🤺🥀-🥅🥇-🥰🥳-🥶🥺🥼-🦢🦰-🦴🦷🧀-🧂🧐🧠-🧿])
Dooming us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane:
Different programs may not identify emoji as being the same, which can clearly cause problems. For example, hashtags are commonly treated as identical even if they differ by case (#foo = #FOO = #Foo = #fOO). But hashtags #🎅🏿 and #🎅🏻 and #🎅 may be treated the same on some systems (≅ #santa, but language-neutral), but treated differently on others.
Previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously.