[英]How to detect emoji using javascript
我需要幫助如何檢測輸入是否包含日本表情符號/表情符號。
目前,我的角色集是charset=utf-8
。 在輸入文本上,用戶可以輸入日語字符/alpanumerics/符號,但是如果它們插入表情符號,則onsubmit
Z686155AF75A60A60A0F6E0F6E9D80C1F7EDD3E9Z將檢查是否有Emoji,會顯示錯誤消息。
我無法工作,因為我不知道如何在Z686155AF75A60A0A0F6E9D80C1F7EDD3E9Z中檢測表情符號?
答案可能有效但很糟糕,因為它們依賴於不可讀且有點“神奇”的 unicode 范圍,因為並不總是清楚它們來自哪里以及它們為什么起作用,更不用說它們對添加到的新表情符號沒有彈性規格
主要瀏覽器現在支持unicode 屬性轉義,它允許根據Emoji
unicode 類別的歸屬來匹配表情符號: \\p{Emoji}
匹配一個表情符號, \\P{Emoji}
匹配一個非表情符號。
請注意,官方0123456789#*
和其他字符也是表情符號,因此您可能想要使用的屬性轉義不是Emoji
而是Extended_Pictographic
,它表示所有通常被理解為表情符號的字符!
確保在末尾包含u
標志。
console.log( /\\p{Emoji}/u.test('flowers'), // false :) /\\p{Emoji}/u.test('flowers 🌼🌺🌸'), // true :) /\\p{Emoji}/u.test('flowers 123'), // true :( ) console.log( /\\p{Extended_Pictographic}/u.test('flowers'), // false :) /\\p{Extended_Pictographic}/u.test('flowers 🌼🌺🌸'), // true :) /\\p{Extended_Pictographic}/u.test('flowers 123'), // false :) )
這適用於檢測表情符號,但如果您想使用相同的正則表達式來提取它們,您可能會對它的行為感到驚訝,因為一些顯示為一個字符的表情符號實際上是幾個字符。 它們就是我們所說的表情符號序列,在這個問題中有更多關於它們的信息
const regex = /\\p{Extended_Pictographic}/ug const family = '👨👩👧' // "family console.log(family.length) // not 1, but 8! console.log(regex.test(family)) // true, as expected console.log(family.match(regex)) // not [family], but [man, woman, girl]
您可以使用以下正則表達式:
/(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g
如果你只是想從字符串中刪除它,你可以做這樣的事情。
function removeEmojis (string) {
var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;
return string.replace(regex, '');
}
一個簡單的函數,如果您的字符串包含一個或多個表情符號,則返回true
。
function isEmoji(str) {
var ranges = [
'(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])' // U+1F680 to U+1F6FF
];
if (str.match(ranges.join('|'))) {
return true;
} else {
return false;
}
}
您可以使用此 lib emoji-regex 中的正則表達式
我們可以檢測特定范圍內的所有代理對列表或表情符號字符。 如果問題與將輸入字符串存儲到 5.5 之前的 MySQL 版本等數據庫有關,我們需要使用以下正則表達式檢測並刪除所有代理對
/([\uD800-\uDBFF][\uDC00-\uDFFF])/g.
2020 年更新:其中許多模式與復合表情符號或修飾符序列不正確匹配,或者只是過時且與較新的表情符號不匹配。
想想這對接吻的情侶:👩🏼❤️💋👩🏽。 它實際上是 6 個(可能更多)與 ZWJ 零寬度連接器粘合在一起的其他表情符號。 要正確匹配,您必須實際匹配該序列。
因此,通過首先匹配較長的序列,這種蠻力模式(太長太粘貼,但它是一個簡單的交替並且運行速度快)正確解析截至 2021 年 5 月的所有 3521 個組合表情符號:
GitHub 鏈接: https : //github.com/sweaver2112/Regex-combined-emojis
2021 年 5 月 10 日編輯:如果這個正則表達式的大小讓您反感,您實際上可以跳過 Unicode 轉義序列而只使用文字表情符號,從而節省大量空間……好吧,幾乎。 這個以星號開頭的字符“*️⃣”會拋出一個“nothing to quantify”錯誤。 擺脫這個家伙會產生一個更短、仍然有效、可復制/粘貼的正則表達式,目前匹配 3,520/3,521 個表情符號:
(?:🧑🏻❤️💋🧑🏼|🧑🏻❤️💋🧑🏽|🧑🏻❤️💋🧑🏾|🧑🏻❤️💋🧑🏿|🧑🏼❤️💋🧑🏻|🧑🏼❤️💋🧑🏽|🧑🏼❤️💋🧑🏾|🧑🏼❤️💋🧑🏿|🧑🏽❤️💋🧑🏻|🧑🏽❤️💋🧑🏼|🧑🏽❤️💋🧑🏾|🧑🏽❤️💋🧑🏿|🧑🏾❤️💋🧑🏻|🧑🏾❤️💋🧑🏼|🧑🏾❤️💋🧑🏽|🧑🏾❤️💋🧑🏿|🧑🏿❤️💋🧑🏻|🧑🏿❤️💋🧑🏼|🧑🏿❤️💋🧑🏽|🧑🏿❤️💋🧑🏾|👩🏻❤️💋👨🏻|👩🏻❤️💋👨🏼|👩🏻❤️💋👨🏽|👩🏻❤️💋👨🏾|👩🏻❤️💋👨🏿|👩🏼❤️💋👨🏻|👩🏼❤️💋👨🏼|👩🏼❤️💋👨🏽|👩🏼❤️💋👨🏾|👩🏼❤️💋👨🏿|👩🏽❤️💋👨🏻|👩🏽❤️💋👨🏼|👩🏽❤️💋👨🏽|👩🏽❤️💋👨🏾|👩🏽❤️💋👨🏿|👩🏾❤️💋👨🏻|👩🏾❤️💋👨🏼|👩🏾❤️💋👨🏽|👩🏾❤️💋👨🏾|👩🏾❤️💋👨🏿|👩🏿❤️💋👨🏻|👩🏿❤️💋👨🏼|👩🏿❤️💋👨🏽|👩🏿❤️💋👨🏾|👩🏿❤️💋👨🏿|👨🏻❤️💋👨🏻|👨🏻❤️💋👨🏼|👨🏻❤️💋👨🏽|👨🏻❤️💋👨🏾|👨🏻❤️💋👨🏿|👨🏼❤️💋👨🏻|👨🏼❤️💋👨🏼|👨🏼❤️💋👨🏽|👨🏼❤️💋👨🏾|👨🏼❤️💋👨🏿|👨🏽❤️💋👨🏻|👨🏽❤️💋👨🏼|👨🏽❤️💋👨🏽|👨🏽❤️💋👨🏾|👨🏽❤️💋👨🏿|👨🏾❤️💋👨🏻|👨🏾❤️💋👨🏼|👨🏾❤️💋👨🏽|👨🏾❤️💋👨🏾|👨🏾❤️💋👨🏿|👨🏿❤️💋👨🏻|👨🏿❤️💋👨🏼|👨🏿❤️💋👨🏽|👨🏿❤️💋👨🏾|👨🏿❤️💋👨🏿|👩🏻❤️💋👩🏻|👩🏻❤️💋👩🏼|👩🏻❤️💋👩🏽|👩🏻❤️💋👩🏾|👩🏻❤️💋👩🏿|👩🏼❤️💋👩🏻|👩🏼❤️💋👩🏼|👩🏼❤️💋👩🏽|👩🏼❤️💋👩🏾|👩🏼❤️💋👩🏿|👩🏽❤️💋👩🏻|👩🏽❤️💋👩🏼|👩🏽❤️💋👩🏽|👩🏽❤️💋👩🏾|👩🏽❤️💋👩🏿|👩🏾❤️💋👩🏻|👩🏾❤️💋👩🏼|👩🏾❤️💋👩🏽|👩🏾❤️💋👩🏾|👩🏾❤️💋👩🏿|👩🏿❤️💋👩🏻|👩🏿❤️💋👩🏼|👩🏿❤️💋👩🏽|👩🏿❤️💋👩🏾|👩🏿❤️💋👩🏿|🏴|🏴|🏴|🧑🏻🤝🧑🏻|🧑🏻🤝🧑🏼|🧑🏻🤝🧑🏽|🧑🏻🤝🧑🏾|🧑🏻🤝🧑🏿|🧑🏼🤝🧑🏻|🧑🏼🤝🧑🏼|🧑🏼🤝🧑🏽|🧑🏼🤝🧑🏾|🧑🏼🤝🧑🏿|🧑🏽🤝🧑🏻|🧑🏽🤝🧑🏼|🧑🏽🤝🧑🏽|🧑🏽🤝🧑🏾|🧑🏽🤝🧑🏿|🧑🏾🤝🧑🏻|🧑🏾🤝🧑🏼|🧑🏾🤝🧑🏽|🧑🏾🤝🧑🏾|🧑🏾🤝🧑🏿|🧑🏿🤝🧑🏻|🧑🏿🤝🧑🏼|🧑🏿🤝🧑🏽|🧑🏿🤝🧑🏾|🧑🏿🤝🧑🏿|👩🏻🤝👩🏼|👩🏻🤝👩🏽|👩🏻🤝👩🏾|👩🏻🤝👩🏿|👩🏼🤝👩🏻|👩🏼🤝👩🏽|👩🏼🤝👩🏾|👩🏼🤝👩🏿|👩🏽🤝👩🏻|👩🏽🤝👩🏼|👩🏽🤝👩🏾|👩🏽🤝👩🏿|👩🏾🤝👩🏻|👩🏾🤝👩🏼|👩🏾🤝👩🏽|👩🏾🤝👩🏿|👩🏿🤝👩🏻|👩🏿🤝👩🏼|👩🏿🤝👩🏽|👩🏿🤝👩🏾|👩🏻🤝👨🏼|👩🏻🤝👨🏽|👩🏻🤝👨🏾|👩🏻🤝👨🏿|👩🏼🤝👨🏻|👩🏼🤝👨🏽|👩🏼🤝👨🏾|👩🏼🤝👨🏿|👩🏽🤝👨🏻|👩🏽🤝👨🏼|👩🏽🤝👨🏾|👩🏽🤝👨🏿|👩🏾🤝👨🏻|👩🏾🤝👨🏼|👩🏾🤝👨🏽|👩🏾🤝👨🏿|👩🏿🤝👨🏻|👩🏿🤝👨🏼|👩🏿🤝👨🏽|👩🏿🤝👨🏾|👨🏻🤝👨🏼|👨🏻🤝👨🏽|👨🏻🤝👨🏾|👨🏻🤝👨🏿|👨🏼🤝👨🏻|👨🏼🤝👨🏽|👨🏼🤝👨🏾|👨🏼🤝👨🏿|👨🏽🤝👨🏻|👨🏽🤝👨🏼|👨🏽🤝👨🏾|👨🏽🤝👨🏿|👨🏾🤝👨🏻|👨🏾🤝👨🏼|👨🏾🤝👨🏽|👨🏾🤝👨🏿|👨🏿🤝👨🏻|👨🏿🤝👨🏼|👨🏿🤝👨🏽|👨🏿🤝👨🏾|🧑🏻❤️🧑🏼|🧑🏻❤️🧑🏽|🧑🏻❤️🧑🏾|🧑🏻❤️🧑🏿|🧑🏼❤️🧑🏻|🧑🏼❤️🧑🏽|🧑🏼❤️🧑🏾|🧑🏼❤️🧑🏿|🧑🏽❤️🧑🏻|🧑🏽❤️🧑🏼|🧑🏽❤️🧑🏾|🧑🏽❤️🧑🏿|🧑🏾❤️🧑🏻|🧑🏾❤️🧑🏼|🧑🏾❤️🧑🏽|🧑🏾❤️🧑🏿|🧑🏿❤️🧑🏻|🧑🏿❤️🧑🏼|🧑🏿❤️🧑🏽|🧑🏿❤️🧑🏾|👩🏻❤️👨🏻|👩🏻❤️👨🏼|👩🏻❤️👨🏽|👩🏻❤️👨🏾|👩🏻❤️👨🏿|👩🏼❤️👨🏻|👩🏼❤️👨🏼|👩🏼❤️👨🏽|👩🏼❤️👨🏾|👩🏼❤️👨🏿|👩🏽❤️👨🏻|👩🏽❤️👨🏼|👩🏽❤️👨🏽|👩🏽❤️👨🏾|👩🏽❤️👨🏿|👩🏾❤️👨🏻|👩🏾❤️👨🏼|👩🏾❤️👨🏽|👩🏾❤️👨🏾|👩🏾❤️👨🏿|👩🏿❤️👨🏻|👩🏿❤️👨🏼|👩🏿❤️👨🏽|👩🏿❤️👨🏾|👩🏿❤️👨🏿|👨🏻❤️👨🏻|👨🏻❤️👨🏼|👨🏻❤️👨🏽|👨🏻❤️👨🏾|👨🏻❤️👨🏿|👨🏼❤️👨🏻|👨🏼❤️👨🏼|👨🏼❤️👨🏽|👨🏼❤️👨🏾|👨🏼❤️👨🏿|👨🏽❤️👨🏻|👨🏽❤️👨🏼|👨🏽❤️👨🏽|👨🏽❤️👨🏾|👨🏽❤️👨🏿|👨🏾❤️👨🏻|👨🏾❤️👨🏼|👨🏾❤️👨🏽|👨🏾❤️👨🏾|👨🏾❤️👨🏿|👨🏿❤️👨🏻|👨🏿❤️👨🏼|👨🏿❤️👨🏽|👨🏿❤️👨🏾|👨🏿❤️👨🏿|👩🏻❤️👩🏻|👩🏻❤️👩🏼|👩🏻❤️👩🏽|👩🏻❤️👩🏾|👩🏻❤️👩🏿|👩🏼❤️👩🏻|👩🏼❤️👩🏼|👩🏼❤️👩🏽|👩🏼❤️👩🏾|👩🏼❤️👩🏿|👩🏽❤️👩🏻|👩🏽❤️👩🏼|👩🏽❤️👩🏽|👩🏽❤️👩🏾|👩🏽❤️👩🏿|👩🏾❤️👩🏻|👩🏾❤️👩🏼|👩🏾❤️👩🏽|👩🏾❤️👩🏾|👩🏾❤️👩🏿|👩🏿❤️👩🏻|👩🏿❤️👩🏼|👩🏿❤️👩🏽|👩🏿❤️👩🏾|👩🏿❤️👩🏿|👩❤️💋👨|👨❤️💋👨|👩❤️💋👩|👨👩👧👦|👨👩👦👦|👨👩👧👧|👨👨👧👦|👨👨👦👦|👨👨👧👧|👩👩👧👦|👩👩👦👦|👩👩👧👧|🧑🤝🧑|👩❤️👨|👨❤️👨|👩❤️👩|👨👩👦|👨👩👧|👨👨👦|👨👨👧|👩👩👦|👩👩👧|👨👦👦|👨👧👦|👨👧👧|👩👦👦|👩👧👦|👩👧👧|👁️🗨️|🧔🏻♂️|🧔🏼♂️|🧔🏽♂️|🧔🏾♂️|🧔🏿♂️|🧔🏻♀️|🧔🏼♀️|🧔🏽♀️|🧔🏾♀️|🧔🏿♀️|👨🏻🦰|👨🏼🦰|👨🏽🦰|👨🏾🦰|👨🏿🦰|👨🏻🦱|👨🏼🦱|👨🏽🦱|👨🏾🦱|👨🏿🦱|👨🏻🦳|👨🏼🦳|👨🏽🦳|👨🏾🦳|👨🏿🦳|👨🏻🦲|👨🏼🦲|👨🏽🦲|👨🏾🦲|👨🏿🦲|👩🏻🦰|👩🏼🦰|👩🏽🦰|👩🏾🦰|👩🏿🦰|🧑🏻🦰|🧑🏼🦰|🧑🏽🦰|🧑🏾🦰|🧑🏿🦰|👩🏻🦱|👩🏼🦱|👩🏽🦱|👩🏾🦱|👩🏿🦱|🧑🏻🦱|🧑🏼🦱|🧑🏽🦱|🧑🏾🦱|🧑🏿🦱|👩🏻🦳|👩🏼🦳|👩🏽🦳|👩🏾🦳|👩🏿🦳|🧑🏻🦳|🧑🏼🦳|🧑🏽🦳|🧑🏾🦳|🧑🏿🦳|👩🏻🦲|👩🏼🦲|👩🏽🦲|👩🏾🦲|👩🏿🦲|🧑🏻🦲|🧑🏼🦲|🧑🏽🦲|🧑🏾🦲|🧑🏿🦲|👱🏻♀️|👱🏼♀️|👱🏽♀️|👱🏾♀️|👱🏿♀️|👱🏻♂️|👱🏼♂️|👱🏽♂️|👱🏾♂️|👱🏿♂️|🙍🏻♂️|🙍🏼♂️|🙍🏽♂️|🙍🏾♂️|🙍🏿♂️|🙍🏻♀️|🙍🏼♀️|🙍🏽♀️|🙍🏾♀️|🙍🏿♀️|🙎🏻♂️|🙎🏼♂️|🙎🏽♂️|🙎🏾♂️|🙎🏿♂️|🙎🏻♀️|🙎🏼♀️|🙎🏽♀️|🙎🏾♀️|🙎🏿♀️|🙅🏻♂️|🙅🏼♂️|🙅🏽♂️|🙅🏾♂️|🙅🏿♂️|🙅🏻♀️|🙅🏼♀️|🙅🏽♀️|🙅🏾♀️|🙅🏿♀️|🙆🏻♂️|🙆🏼♂️|🙆🏽♂️|🙆🏾♂️|🙆🏿♂️|🙆🏻♀️|🙆🏼♀️|🙆🏽♀️|🙆🏾♀️|🙆🏿♀️|💁🏻♂️|💁🏼♂️|💁🏽♂️|💁🏾♂️|💁🏿♂️|💁🏻♀️|💁🏼♀️|💁🏽♀️|💁🏾♀️|💁🏿♀️|🙋🏻♂️|🙋🏼♂️|🙋🏽♂️|🙋🏾♂️|🙋🏿♂️|🙋🏻♀️|🙋🏼♀️|🙋🏽♀️|🙋🏾♀️|🙋🏿♀️|🧏🏻♂️|🧏🏼♂️|🧏🏽♂️|🧏🏾♂️|🧏🏿♂️|🧏🏻♀️|🧏🏼♀️|🧏🏽♀️|🧏🏾♀️|🧏🏿♀️|🙇🏻♂️|🙇🏼♂️|🙇🏽♂️|🙇🏾♂️|🙇🏿♂️|🙇🏻♀️|🙇🏼♀️|🙇🏽♀️|🙇🏾♀️|🙇🏿♀️|🤦🏻♂️|🤦🏼♂️|🤦🏽♂️|🤦🏾♂️|🤦🏿♂️|🤦🏻♀️|🤦🏼♀️|🤦🏽♀️|🤦🏾♀️|🤦🏿♀️|🤷🏻♂️|🤷🏼♂️|🤷🏽♂️|🤷🏾♂️|🤷🏿♂️|🤷🏻♀️|🤷🏼♀️|🤷🏽♀️|🤷🏾♀️|🤷🏿♀️|🧑🏻⚕️|🧑🏼⚕️|🧑🏽⚕️|🧑🏾⚕️|🧑🏿⚕️|👨🏻⚕️|👨🏼⚕️|👨🏽⚕️|👨🏾⚕️|👨🏿⚕️|👩🏻⚕️|👩🏼⚕️|👩🏽⚕️|👩🏾⚕️|👩🏿⚕️|🧑🏻🎓|🧑🏼🎓|🧑🏽🎓|🧑🏾🎓|🧑🏿🎓|👨🏻🎓|👨🏼🎓|👨🏽🎓|👨🏾🎓|👨🏿🎓|👩🏻🎓|👩🏼🎓|👩🏽🎓|👩🏾🎓|👩🏿🎓|🧑🏻🏫|🧑🏼🏫|🧑🏽🏫|🧑🏾🏫|🧑🏿🏫|👨🏻🏫|👨🏼🏫|👨🏽🏫|👨🏾🏫|👨🏿🏫|👩🏻🏫|👩🏼🏫|👩🏽🏫|👩🏾🏫|👩🏿🏫|🧑🏻⚖️|🧑🏼⚖️|🧑🏽⚖️|🧑🏾⚖️|🧑🏿⚖️|👨🏻⚖️|👨🏼⚖️|👨🏽⚖️|👨🏾⚖️|👨🏿⚖️|👩🏻⚖️|👩🏼⚖️|👩🏽⚖️|👩🏾⚖️|👩🏿⚖️|🧑🏻🌾|🧑🏼🌾|🧑🏽🌾|🧑🏾🌾|🧑🏿🌾|👨🏻🌾|👨🏼🌾|👨🏽🌾|👨🏾🌾|👨🏿🌾|👩🏻🌾|👩🏼🌾|👩🏽🌾|👩🏾🌾|👩🏿🌾|🧑🏻🍳|🧑🏼🍳|🧑🏽🍳|🧑🏾🍳|🧑🏿🍳|👨🏻🍳|👨🏼🍳|👨🏽🍳|👨🏾🍳|👨🏿🍳|👩🏻🍳|👩🏼🍳|👩🏽🍳|👩🏾🍳|👩🏿🍳|🧑🏻🔧|🧑🏼🔧|🧑🏽🔧|🧑🏾🔧|🧑🏿🔧|👨🏻🔧|👨🏼🔧|👨🏽🔧|👨🏾🔧|👨🏿🔧|👩🏻🔧|👩🏼🔧|👩🏽🔧|👩🏾🔧|👩🏿🔧|🧑🏻🏭|🧑🏼🏭|🧑🏽🏭|🧑🏾🏭|🧑🏿🏭|👨🏻🏭|👨🏼🏭|👨🏽🏭|👨🏾🏭|👨🏿🏭|👩🏻🏭|👩🏼🏭|👩🏽🏭|👩🏾🏭|👩🏿🏭|🧑🏻💼|🧑🏼💼|🧑🏽💼|🧑🏾💼|🧑🏿💼|👨🏻💼|👨🏼💼|👨🏽💼|👨🏾💼|👨🏿💼|👩🏻💼|👩🏼💼|👩🏽💼|👩🏾💼|👩🏿💼|🧑🏻🔬|🧑🏼🔬|🧑🏽🔬|🧑🏾🔬|🧑🏿🔬|👨🏻🔬|👨🏼🔬|👨🏽🔬|👨🏾🔬|👨🏿🔬|👩🏻🔬|👩🏼🔬|👩🏽🔬|👩🏾🔬|👩🏿🔬|🧑🏻💻|🧑🏼💻|🧑🏽💻|🧑🏾💻|🧑🏿💻|👨🏻💻|👨🏼💻|👨🏽💻|👨🏾💻|👨🏿💻|👩🏻💻|👩🏼💻|👩🏽💻|👩🏾💻|👩🏿💻|🧑🏻🎤|🧑🏼🎤|🧑🏽🎤|🧑🏾🎤|🧑🏿🎤|👨🏻🎤|👨🏼🎤|👨🏽🎤|👨🏾🎤|👨🏿🎤|👩🏻🎤|👩🏼🎤|👩🏽🎤|👩🏾🎤|👩🏿🎤|🧑🏻🎨|🧑🏼🎨|🧑🏽🎨|🧑🏾🎨|🧑🏿🎨|👨🏻🎨|👨🏼🎨|👨🏽🎨|👨🏾🎨|👨🏿🎨|👩🏻🎨|👩🏼🎨|👩🏽🎨|👩🏾🎨|👩🏿🎨|🧑🏻✈️|🧑🏼✈️|🧑🏽✈️|🧑🏾✈️|🧑🏿✈️|👨🏻✈️|👨🏼✈️|👨🏽✈️|👨🏾✈️|👨🏿✈️|👩🏻✈️|👩🏼✈️|👩🏽✈️|👩🏾✈️|👩🏿✈️|🧑🏻🚀|🧑🏼🚀|🧑🏽🚀|🧑🏾🚀|🧑🏿🚀|👨🏻🚀|👨🏼🚀|👨🏽🚀|👨🏾🚀|👨🏿🚀|👩🏻🚀|👩🏼🚀|👩🏽🚀|👩🏾🚀|👩🏿🚀|🧑🏻🚒|🧑🏼🚒|🧑🏽🚒|🧑🏾🚒|🧑🏿🚒|👨🏻🚒|👨🏼🚒|👨🏽🚒|👨🏾🚒|👨🏿🚒|👩🏻🚒|👩🏼🚒|👩🏽🚒|👩🏾🚒|👩🏿🚒|👮🏻♂️|👮🏼♂️|👮🏽♂️|👮🏾♂️|👮🏿♂️|👮🏻♀️|👮🏼♀️|👮🏽♀️|👮🏾♀️|👮🏿♀️|🕵🏻♂️|🕵🏼♂️|🕵🏽♂️|🕵🏾♂️|🕵🏿♂️|🕵🏻♀️|🕵🏼♀️|🕵🏽♀️|🕵🏾♀️|🕵🏿♀️|💂🏻♂️|💂🏼♂️|💂🏽♂️|💂🏾♂️|💂🏿♂️|💂🏻♀️|💂🏼♀️|💂🏽♀️|💂🏾♀️|💂🏿♀️|👷🏻♂️|👷🏼♂️|👷🏽♂️|👷🏾♂️|👷🏿♂️|👷🏻♀️|👷🏼♀️|👷🏽♀️|👷🏾♀️|👷🏿♀️|👳🏻♂️|👳🏼♂️|👳🏽♂️|👳🏾♂️|👳🏿♂️|👳🏻♀️|👳🏼♀️|👳🏽♀️|👳🏾♀️|👳🏿♀️|🤵🏻♂️|🤵🏼♂️|🤵🏽♂️|🤵🏾♂️|🤵🏿♂️|🤵🏻♀️|🤵🏼♀️|🤵🏽♀️|🤵🏾♀️|🤵🏿♀️|👰🏻♂️|👰🏼♂️|👰🏽♂️|👰🏾♂️|👰🏿♂️|👰🏻♀️|👰🏼♀️|👰🏽♀️|👰🏾♀️|👰🏿♀️|👩🏻🍼|👩🏼🍼|👩🏽🍼|👩🏾🍼|👩🏿🍼|👨🏻🍼|👨🏼🍼|👨🏽🍼|👨🏾🍼|👨🏿🍼|🧑🏻🍼|🧑🏼🍼|🧑🏽🍼|🧑🏾🍼|🧑🏿🍼|🧑🏻🎄|🧑🏼🎄|🧑🏽🎄|🧑🏾🎄|🧑🏿🎄|🦸🏻♂️|🦸🏼♂️|🦸🏽♂️|🦸🏾♂️|🦸🏿♂️|🦸🏻♀️|🦸🏼♀️|🦸🏽♀️|🦸🏾♀️|🦸🏿♀️|🦹🏻♂️|🦹🏼♂️|🦹🏽♂️|🦹🏾♂️|🦹🏿♂️|🦹🏻♀️|🦹🏼♀️|🦹🏽♀️|🦹🏾♀️|🦹🏿♀️|🧙🏻♂️|🧙🏼♂️|🧙🏽♂️|🧙🏾♂️|🧙🏿♂️|🧙🏻♀️|🧙🏼♀️|🧙🏽♀️|🧙🏾♀️|🧙🏿♀️|🧚🏻♂️|🧚🏼♂️|🧚🏽♂️|🧚🏾♂️|🧚🏿♂️|🧚🏻♀️|🧚🏼♀️|🧚🏽♀️|🧚🏾♀️|🧚🏿♀️|🧛🏻♂️|🧛🏼♂️|🧛🏽♂️|🧛🏾♂️|🧛🏿♂️|🧛🏻♀️|🧛🏼♀️|🧛🏽♀️|🧛🏾♀️|🧛🏿♀️|🧜🏻♂️|🧜🏼♂️|🧜🏽♂️|🧜🏾♂️|🧜🏿♂️|🧜🏻♀️|🧜🏼♀️|🧜🏽♀️|🧜🏾♀️|🧜🏿♀️|🧝🏻♂️|🧝🏼♂️|🧝🏽♂️|🧝🏾♂️|🧝🏿♂️|🧝🏻♀️|🧝🏼♀️|🧝🏽♀️|🧝🏾♀️|🧝🏿♀️|💆🏻♂️|💆🏼♂️|💆🏽♂️|💆🏾♂️|💆🏿♂️|💆🏻♀️|💆🏼♀️|💆🏽♀️|💆🏾♀️|💆🏿♀️|💇🏻♂️|💇🏼♂️|💇🏽♂️|💇🏾♂️|💇🏿♂️|💇🏻♀️|💇🏼♀️|💇🏽♀️|💇🏾♀️|💇🏿♀️|🚶🏻♂️|🚶🏼♂️|🚶🏽♂️|🚶🏾♂️|🚶🏿♂️|🚶🏻♀️|🚶🏼♀️|🚶🏽♀️|🚶🏾♀️|🚶🏿♀️|🧍🏻♂️|🧍🏼♂️|🧍🏽♂️|🧍🏾♂️|🧍🏿♂️|🧍🏻♀️|🧍🏼♀️|🧍🏽♀️|🧍🏾♀️|🧍🏿♀️|🧎🏻♂️|🧎🏼♂️|🧎🏽♂️|🧎🏾♂️|🧎🏿♂️|🧎🏻♀️|🧎🏼♀️|🧎🏽♀️|🧎🏾♀️|🧎🏿♀️|🧑🏻🦯|🧑🏼🦯|🧑🏽🦯|🧑🏾🦯|🧑🏿🦯|👨🏻🦯|👨🏼🦯|👨🏽🦯|👨🏾🦯|👨🏿🦯|👩🏻🦯|👩🏼🦯|👩🏽🦯|👩🏾🦯|👩🏿🦯|🧑🏻🦼|🧑🏼🦼|🧑🏽🦼|🧑🏾🦼|🧑🏿🦼|👨🏻🦼|👨🏼🦼|👨🏽🦼|👨🏾🦼|👨🏿🦼|👩🏻🦼|👩🏼🦼|👩🏽🦼|👩🏾🦼|👩🏿🦼|🧑🏻🦽|🧑🏼🦽|🧑🏽🦽|🧑🏾🦽|🧑🏿🦽|👨🏻🦽|👨🏼🦽|👨🏽🦽|👨🏾🦽|👨🏿🦽|👩🏻🦽|👩🏼🦽|👩🏽🦽|👩🏾🦽|👩🏿🦽|🏃🏻♂️|🏃🏼♂️|🏃🏽♂️|🏃🏾♂️|🏃🏿♂️|🏃🏻♀️|🏃🏼♀️|🏃🏽♀️|🏃🏾♀️|🏃🏿♀️|🧖🏻♂️|🧖🏼♂️|🧖🏽♂️|🧖🏾♂️|🧖🏿♂️|🧖🏻♀️|🧖🏼♀️|🧖🏽♀️|🧖🏾♀️|🧖🏿♀️|🧗🏻♂️|🧗🏼♂️|🧗🏽♂️|🧗🏾♂️|🧗🏿♂️|🧗🏻♀️|🧗🏼♀️|🧗🏽♀️|🧗🏾♀️|🧗🏿♀️|🏌🏻♂️|🏌🏼♂️|🏌🏽♂️|🏌🏾♂️|🏌🏿♂️|🏌🏻♀️|🏌🏼♀️|🏌🏽♀️|🏌🏾♀️|🏌🏿♀️|🏄🏻♂️|🏄🏼♂️|🏄🏽♂️|🏄🏾♂️|🏄🏿♂️|🏄🏻♀️|🏄🏼♀️|🏄🏽♀️|🏄🏾♀️|🏄🏿♀️|🚣🏻♂️|🚣🏼♂️|🚣🏽♂️|🚣🏾♂️|🚣🏿♂️|🚣🏻♀️|🚣🏼♀️|🚣🏽♀️|🚣🏾♀️|🚣🏿♀️|🏊🏻♂️|🏊🏼♂️|🏊🏽♂️|🏊🏾♂️|🏊🏿♂️|🏊🏻♀️|🏊🏼♀️|🏊🏽♀️|🏊🏾♀️|🏊🏿♀️|🏋🏻♂️|🏋🏼♂️|🏋🏽♂️|🏋🏾♂️|🏋🏿♂️|🏋🏻♀️|🏋🏼♀️|🏋🏽♀️|🏋🏾♀️|🏋🏿♀️|🚴🏻♂️|🚴🏼♂️|🚴🏽♂️|🚴🏾♂️|🚴🏿♂️|🚴🏻♀️|🚴🏼♀️|🚴🏽♀️|🚴🏾♀️|🚴🏿♀️|🚵🏻♂️|🚵🏼♂️|🚵🏽♂️|🚵🏾♂️|🚵🏿♂️|🚵🏻♀️|🚵🏼♀️|🚵🏽♀️|🚵🏾♀️|🚵🏿♀️|🤸🏻♂️|🤸🏼♂️|🤸🏽♂️|🤸🏾♂️|🤸🏿♂️|🤸🏻♀️|🤸🏼♀️|🤸🏽♀️|🤸🏾♀️|🤸🏿♀️|🤽🏻♂️|🤽🏼♂️|🤽🏽♂️|🤽🏾♂️|🤽🏿♂️|🤽🏻♀️|🤽🏼♀️|🤽🏽♀️|🤽🏾♀️|🤽🏿♀️|🤾🏻♂️|🤾🏼♂️|🤾🏽♂️|🤾🏾♂️|🤾🏿♂️|🤾🏻♀️|🤾🏼♀️|🤾🏽♀️|🤾🏾♀️|🤾🏿♀️|🤹🏻♂️|🤹🏼♂️|🤹🏽♂️|🤹🏾♂️|🤹🏿♂️|🤹🏻♀️|🤹🏼♀️|🤹🏽♀️|🤹🏾♀️|🤹🏿♀️|🧘🏻♂️|🧘🏼♂️|🧘🏽♂️|🧘🏾♂️|🧘🏿♂️|🧘🏻♀️|🧘🏼♀️|🧘🏽♀️|🧘🏾♀️|🧘🏿♀️|😶🌫️|🕵️♂️|🕵️♀️|🏌️♂️|🏌️♀️|🏋️♂️|🏋️♀️|🏳️🌈|🏳️⚧️|⛹🏻♂️|⛹🏼♂️|⛹🏽♂️|⛹🏾♂️|⛹🏿♂️|⛹🏻♀️|⛹🏼♀️|⛹🏽♀️|⛹🏾♀️|⛹🏿♀️|😮💨|😵💫|❤️🔥|❤️🩹|🧔♂️|🧔♀️|👨🦰|👨🦱|👨🦳|👨🦲|👩🦰|🧑🦰|👩🦱|🧑🦱|👩🦳|🧑🦳|👩🦲|🧑🦲|👱♀️|👱♂️|🙍♂️|🙍♀️|🙎♂️|🙎♀️|🙅♂️|🙅♀️|🙆♂️|🙆♀️|💁♂️|💁♀️|🙋♂️|🙋♀️|🧏♂️|🧏♀️|🙇♂️|🙇♀️|🤦♂️|🤦♀️|🤷♂️|🤷♀️|🧑⚕️|👨⚕️|👩⚕️|🧑🎓|👨🎓|👩🎓|🧑🏫|👨🏫|👩🏫|🧑⚖️|👨⚖️|👩⚖️|🧑🌾|👨🌾|👩🌾|🧑🍳|👨🍳|👩🍳|🧑🔧|👨🔧|👩🔧|🧑🏭|👨🏭|👩🏭|🧑💼|👨💼|👩💼|🧑🔬|👨🔬|👩🔬|🧑💻|👨💻|👩💻|🧑🎤|👨🎤|👩🎤|🧑🎨|👨🎨|👩🎨|🧑✈️|👨✈️|👩✈️|🧑🚀|👨🚀|👩🚀|🧑🚒|👨🚒|👩🚒|👮♂️|👮♀️|💂♂️|💂♀️|👷♂️|👷♀️|👳♂️|👳♀️|🤵♂️|🤵♀️|👰♂️|👰♀️|👩🍼|👨🍼|🧑🍼|🧑🎄|🦸♂️|🦸♀️|🦹♂️|🦹♀️|🧙♂️|🧙♀️|🧚♂️|🧚♀️|🧛♂️|🧛♀️|🧜♂️|🧜♀️|🧝♂️|🧝♀️|🧞♂️|🧞♀️|🧟♂️|🧟♀️|💆♂️|💆♀️|💇♂️|💇♀️|🚶♂️|🚶♀️|🧍♂️|🧍♀️|🧎♂️|🧎♀️|🧑🦯|👨🦯|👩🦯|🧑🦼|👨🦼|👩🦼|🧑🦽|👨🦽|👩🦽|🏃♂️|🏃♀️|👯♂️|👯♀️|🧖♂️|🧖♀️|🧗♂️|🧗♀️|🏄♂️|🏄♀️|🚣♂️|🚣♀️|🏊♂️|🏊♀️|⛹️♂️|⛹️♀️|🚴♂️|🚴♀️|🚵♂️|🚵♀️|🤸♂️|🤸♀️|🤼♂️|🤼♀️|🤽♂️|🤽♀️|🤾♂️|🤾♀️|🤹♂️|🤹♀️|🧘♂️|🧘♀️|👨👦|👨👧|👩👦|👩👧|🐕🦺|🐻❄️|🏴☠️|🐈⬛|🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼|👋🏻|👋🏼|👋🏽|👋🏾|👋🏿|🤚🏻|🤚🏼|🤚🏽|🤚🏾|🤚🏿|🖐🏻|🖐🏼|🖐🏽|🖐🏾|🖐🏿|🖖🏻|🖖🏼|🖖🏽|🖖🏾|🖖🏿|👌🏻|👌🏼|👌🏽|👌🏾|👌🏿|🤌🏻|🤌🏼|🤌🏽|🤌🏾|🤌🏿|🤏🏻|🤏🏼|🤏🏽|🤏🏾|🤏🏿|🤞🏻|🤞🏼|🤞🏽|🤞🏾|🤞🏿|🤟🏻|🤟🏼|🤟🏽|🤟🏾|🤟🏿|🤘🏻|🤘🏼|🤘🏽|🤘🏾|🤘🏿|🤙🏻|🤙🏼|🤙🏽|🤙🏾|🤙🏿|👈🏻|👈🏼|👈🏽|👈🏾|👈🏿|👉🏻|👉🏼|👉🏽|👉🏾|👉🏿|👆🏻|👆🏼|👆🏽|👆🏾|👆🏿|🖕🏻|🖕🏼|🖕🏽|🖕🏾|🖕🏿|👇🏻|👇🏼|👇🏽|👇🏾|👇🏿|👍🏻|👍🏼|👍🏽|👍🏾|👍🏿|👎🏻|👎🏼|👎🏽|👎🏾|👎🏿|👊🏻|👊🏼|👊🏽|👊🏾|👊🏿|🤛🏻|🤛🏼|🤛🏽|🤛🏾|🤛🏿|🤜🏻|🤜🏼|🤜🏽|🤜🏾|🤜🏿|👏🏻|👏🏼|👏🏽|👏🏾|👏🏿|🙌🏻|🙌🏼|🙌🏽|🙌🏾|🙌🏿|👐🏻|👐🏼|👐🏽|👐🏾|👐🏿|🤲🏻|🤲🏼|🤲🏽|🤲🏾|🤲🏿|🙏🏻|🙏🏼|🙏🏽|🙏🏾|🙏🏿|💅🏻|💅🏼|💅🏽|💅🏾|💅🏿|🤳🏻|🤳🏼|🤳🏽|🤳🏾|🤳🏿|💪🏻|💪🏼|💪🏽|💪🏾|💪🏿|🦵🏻|🦵🏼|🦵🏽|🦵🏾|🦵🏿|🦶🏻|🦶🏼|🦶🏽|🦶🏾|🦶🏿|👂🏻|👂🏼|👂🏽|👂🏾|👂🏿|🦻🏻|🦻🏼|🦻🏽|🦻🏾|🦻🏿|👃🏻|👃🏼|👃🏽|👃🏾|👃🏿|👶🏻|👶🏼|👶🏽|👶🏾|👶🏿|🧒🏻|🧒🏼|🧒🏽|🧒🏾|🧒🏿|👦🏻|👦🏼|👦🏽|👦🏾|👦🏿|👧🏻|👧🏼|👧🏽|👧🏾|👧🏿|🧑🏻|🧑🏼|🧑🏽|🧑🏾|🧑🏿|👱🏻|👱🏼|👱🏽|👱🏾|👱🏿|👨🏻|👨🏼|👨🏽|👨🏾|👨🏿|🧔🏻|🧔🏼|🧔🏽|🧔🏾|🧔🏿|👩🏻|👩🏼|👩🏽|👩🏾|👩🏿|🧓🏻|🧓🏼|🧓🏽|🧓🏾|🧓🏿|👴🏻|👴🏼|👴🏽|👴🏾|👴🏿|👵🏻|👵🏼|👵🏽|👵🏾|👵🏿|🙍🏻|🙍🏼|🙍🏽|🙍🏾|🙍🏿|🙎🏻|🙎🏼|🙎🏽|🙎🏾|🙎🏿|🙅🏻|🙅🏼|🙅🏽|🙅🏾|🙅🏿|🙆🏻|🙆🏼|🙆🏽|🙆🏾|🙆🏿|💁🏻|💁🏼|💁🏽|💁🏾|💁🏿|🙋🏻|🙋🏼|🙋🏽|🙋🏾|🙋🏿|🧏🏻|🧏🏼|🧏🏽|🧏🏾|🧏🏿|🙇🏻|🙇🏼|🙇🏽|🙇🏾|🙇🏿|🤦🏻|🤦🏼|🤦🏽|🤦🏾|🤦🏿|🤷🏻|🤷🏼|🤷🏽|🤷🏾|🤷🏿|👮🏻|👮🏼|👮🏽|👮🏾|👮🏿|🕵🏻|🕵🏼|🕵🏽|🕵🏾|🕵🏿|💂🏻|💂🏼|💂🏽|💂🏾|💂🏿|🥷🏻|🥷🏼|🥷🏽|🥷🏾|🥷🏿|👷🏻|👷🏼|👷🏽|👷🏾|👷🏿|🤴🏻|🤴🏼|🤴🏽|🤴🏾|🤴🏿|👸🏻|👸🏼|👸🏽|👸🏾|👸🏿|👳🏻|👳🏼|👳🏽|👳🏾|👳🏿|👲🏻|👲🏼|👲🏽|👲🏾|👲🏿|🧕🏻|🧕🏼|🧕🏽|🧕🏾|🧕🏿|🤵🏻|🤵🏼|🤵🏽|🤵🏾|🤵🏿|👰🏻|👰🏼|👰🏽|👰🏾|👰🏿|🤰🏻|🤰🏼|🤰🏽|🤰🏾|🤰🏿|🤱🏻|🤱🏼|🤱🏽|🤱🏾|🤱🏿|👼🏻|👼🏼|👼🏽|👼🏾|👼🏿|🎅🏻|🎅🏼|🎅🏽|🎅🏾|🎅🏿|🤶🏻|🤶🏼|🤶🏽|🤶🏾|🤶🏿|🦸🏻|🦸🏼|🦸🏽|🦸🏾|🦸🏿|🦹🏻|🦹🏼|🦹🏽|🦹🏾|🦹🏿|🧙🏻|🧙🏼|🧙🏽|🧙🏾|🧙🏿|🧚🏻|🧚🏼|🧚🏽|🧚🏾|🧚🏿|🧛🏻|🧛🏼|🧛🏽|🧛🏾|🧛🏿|🧜🏻|🧜🏼|🧜🏽|🧜🏾|🧜🏿|🧝🏻|🧝🏼|🧝🏽|🧝🏾|🧝🏿|💆🏻|💆🏼|💆🏽|💆🏾|💆🏿|💇🏻|💇🏼|💇🏽|💇🏾|💇🏿|🚶🏻|🚶🏼|🚶🏽|🚶🏾|🚶🏿|🧍🏻|🧍🏼|🧍🏽|🧍🏾|🧍🏿|🧎🏻|🧎🏼|🧎🏽|🧎🏾|🧎🏿|🏃🏻|🏃🏼|🏃🏽|🏃🏾|🏃🏿|💃🏻|💃🏼|💃🏽|💃🏾|💃🏿|🕺🏻|🕺🏼|🕺🏽|🕺🏾|🕺🏿|🕴🏻|🕴🏼|🕴🏽|🕴🏾|🕴🏿|🧖🏻|🧖🏼|🧖🏽|🧖🏾|🧖🏿|🧗🏻|🧗🏼|🧗🏽|🧗🏾|🧗🏿|🏇🏻|🏇🏼|🏇🏽|🏇🏾|🏇🏿|🏂🏻|🏂🏼|🏂🏽|🏂🏾|🏂🏿|🏌🏻|🏌🏼|🏌🏽|🏌🏾|🏌🏿|🏄🏻|🏄🏼|🏄🏽|🏄🏾|🏄🏿|🚣🏻|🚣🏼|🚣🏽|🚣🏾|🚣🏿|🏊🏻|🏊🏼|🏊🏽|🏊🏾|🏊🏿|🏋🏻|🏋🏼|🏋🏽|🏋🏾|🏋🏿|🚴🏻|🚴🏼|🚴🏽|🚴🏾|🚴🏿|🚵🏻|🚵🏼|🚵🏽|🚵🏾|🚵🏿|🤸🏻|🤸🏼|🤸🏽|🤸🏾|🤸🏿|🤽🏻|🤽🏼|🤽🏽|🤽🏾|🤽🏿|🤾🏻|🤾🏼|🤾🏽|🤾🏾|🤾🏿|🤹🏻|🤹🏼|🤹🏽|🤹🏾|🤹🏿|🧘🏻|🧘🏼|🧘🏽|🧘🏾|🧘🏿|🛀🏻|🛀🏼|🛀🏽|🛀🏾|🛀🏿|🛌🏻|🛌🏼|🛌🏽|🛌🏾|🛌🏿|👭🏻|👭🏼|👭🏽|👭🏾|👭🏿|👫🏻|👫🏼|👫🏽|👫🏾|👫🏿|👬🏻|👬🏼|👬🏽|👬🏾|👬🏿|💏🏻|💏🏼|💏🏽|💏🏾|💏🏿|💑🏻|💑🏼|💑🏽|💑🏾|💑🏿|#️⃣|0️⃣|1️⃣|2️⃣|3️⃣|4️⃣|5️⃣|6️⃣|7️⃣|8️⃣|9️⃣|✋🏻|✋🏼|✋🏽|✋🏾|✋🏿|✌🏻|✌🏼|✌🏽|✌🏾|✌🏿|☝🏻|☝🏼|☝🏽|☝🏾|☝🏿|✊🏻|✊🏼|✊🏽|✊🏾|✊🏿|✍🏻|✍🏼|✍🏽|✍🏾|✍🏿|⛹🏻|⛹🏼|⛹🏽|⛹🏾|⛹🏿|😀|😃|😄|😁|😆|😅|🤣|😂|🙂|🙃|😉|😊|😇|🥰|😍|🤩|😘|😗|😚|😙|🥲|😋|😛|😜|🤪|😝|🤑|🤗|🤭|🤫|🤔|🤐|🤨|😐|😑|😶|😏|😒|🙄|😬|🤥|😌|😔|😪|🤤|😴|😷|🤒|🤕|🤢|🤮|🤧|🥵|🥶|🥴|😵|🤯|🤠|🥳|🥸|😎|🤓|🧐|😕|😟|🙁|😮|😯|😲|😳|🥺|😦|😧|😨|😰|😥|😢|😭|😱|😖|😣|😞|😓|😩|😫|🥱|😤|😡|😠|🤬|😈|👿|💀|💩|🤡|👹|👺|👻|👽|👾|🤖|😺|😸|😹|😻|😼|😽|🙀|😿|😾|🙈|🙉|🙊|💋|💌|💘|💝|💖|💗|💓|💞|💕|💟|💔|🧡|💛|💚|💙|💜|🤎|🖤|🤍|💯|💢|💥|💫|💦|💨|🕳|💣|💬|🗨|🗯|💭|💤|👋|🤚|🖐|🖖|👌|🤌|🤏|🤞|🤟|🤘|🤙|👈|👉|👆|🖕|👇|👍|👎|👊|🤛|🤜|👏|🙌|👐|🤲|🤝|🙏|💅|🤳|💪|🦾|🦿|🦵|🦶|👂|🦻|👃|🧠|🫀|🫁|🦷|🦴|👀|👁|👅|👄|👶|🧒|👦|👧|🧑|👱|👨|🧔|👩|🧓|👴|👵|🙍|🙎|🙅|🙆|💁|🙋|🧏|🙇|🤦|🤷|👮|🕵|💂|🥷|👷|🤴|👸|👳|👲|🧕|🤵|👰|🤰|🤱|👼|🎅|🤶|🦸|🦹|🧙|🧚|🧛|🧜|🧝|🧞|🧟|💆|💇|🚶|🧍|🧎|🏃|💃|🕺|🕴|👯|🧖|🧗|🤺|🏇|🏂|🏌|🏄|🚣|🏊|🏋|🚴|🚵|🤸|🤼|🤽|🤾|🤹|🧘|🛀|🛌|👭|👫|👬|💏|💑|👪|🗣|👤|👥|🫂|👣|🦰|🦱|🦳|🦲|🐵|🐒|🦍|🦧|🐶|🐕|🦮|🐩|🐺|🦊|🦝|🐱|🐈|🦁|🐯|🐅|🐆|🐴|🐎|🦄|🦓|🦌|🦬|🐮|🐂|🐃|🐄|🐷|🐖|🐗|🐽|🐏|🐑|🐐|🐪|🐫|🦙|🦒|🐘|🦣|🦏|🦛|🐭|🐁|🐀|🐹|🐰|🐇|🐿|🦫|🦔|🦇|🐻|🐨|🐼|🦥|🦦|🦨|🦘|🦡|🐾|🦃|🐔|🐓|🐣|🐤|🐥|🐦|🐧|🕊|🦅|🦆|🦢|🦉|🦤|🪶|🦩|🦚|🦜|🐸|🐊|🐢|🦎|🐍|🐲|🐉|🦕|🦖|🐳|🐋|🐬|🦭|🐟|🐠|🐡|🦈|🐙|🐚|🐌|🦋|🐛|🐜|🐝|🪲|🐞|🦗|🪳|🕷|🕸|🦂|🦟|🪰|🪱|🦠|💐|🌸|💮|🏵|🌹|🥀|🌺|🌻|🌼|🌷|🌱|🪴|🌲|🌳|🌴|🌵|🌾|🌿|🍀|🍁|🍂|🍃|🍇|🍈|🍉|🍊|🍋|🍌|🍍|🥭|🍎|🍏|🍐|🍑|🍒|🍓|🫐|🥝|🍅|🫒|🥥|🥑|🍆|🥔|🥕|🌽|🌶|🫑|🥒|🥬|🥦|🧄|🧅|🍄|🥜|🌰|🍞|🥐|🥖|🫓|🥨|🥯|🥞|🧇|🧀|🍖|🍗|🥩|🥓|🍔|🍟|🍕|🌭|🥪|🌮|🌯|🫔|🥙|🧆|🥚|🍳|🥘|🍲|🫕|🥣|🥗|🍿|🧈|🧂|🥫|🍱|🍘|🍙|🍚|🍛|🍜|🍝|🍠|🍢|🍣|🍤|🍥|🥮|🍡|🥟|🥠|🥡|🦀|🦞|🦐|🦑|🦪|🍦|🍧|🍨|🍩|🍪|🎂|🍰|🧁|🥧|🍫|🍬|🍭|🍮|🍯|🍼|🥛|🫖|🍵|🍶|🍾|🍷|🍸|🍹|🍺|🍻|🥂|🥃|🥤|🧋|🧃|🧉|🧊|🥢|🍽|🍴|🥄|🔪|🏺|🌍|🌎|🌏|🌐|🗺|🗾|🧭|🏔|🌋|🗻|🏕|🏖|🏜|🏝|🏞|🏟|🏛|🏗|🧱|🪨|🪵|🛖|🏘|🏚|🏠|🏡|🏢|🏣|🏤|🏥|🏦|🏨|🏩|🏪|🏫|🏬|🏭|🏯|🏰|💒|🗼|🗽|🕌|🛕|🕍|🕋|🌁|🌃|🏙|🌄|🌅|🌆|🌇|🌉|🎠|🎡|🎢|💈|🎪|🚂|🚃|🚄|🚅|🚆|🚇|🚈|🚉|🚊|🚝|🚞|🚋|🚌|🚍|🚎|🚐|🚑|🚒|🚓|🚔|🚕|🚖|🚗|🚘|🚙|🛻|🚚|🚛|🚜|🏎|🏍|🛵|🦽|🦼|🛺|🚲|🛴|🛹|🛼|🚏|🛣|🛤|🛢|🚨|🚥|🚦|🛑|🚧|🛶|🚤|🛳|🛥|🚢|🛩|🛫|🛬|🪂|💺|🚁|🚟|🚠|🚡|🛰|🚀|🛸|🛎|🧳|🕰|🕛|🕧|🕐|🕜|🕑|🕝|🕒|🕞|🕓|🕟|🕔|🕠|🕕|🕡|🕖|🕢|🕗|🕣|🕘|🕤|🕙|🕥|🕚|🕦|🌑|🌒|🌓|🌔|🌕|🌖|🌗|🌘|🌙|🌚|🌛|🌜|🌡|🌝|🌞|🪐|🌟|🌠|🌌|🌤|🌥|🌦|🌧|🌨|🌩|🌪|🌫|🌬|🌀|🌈|🌂|🔥|💧|🌊|🎃|🎄|🎆|🎇|🧨|🎈|🎉|🎊|🎋|🎍|🎎|🎏|🎐|🎑|🧧|🎀|🎁|🎗|🎟|🎫|🎖|🏆|🏅|🥇|🥈|🥉|🥎|🏀|🏐|🏈|🏉|🎾|🥏|🎳|🏏|🏑|🏒|🥍|🏓|🏸|🥊|🥋|🥅|🎣|🤿|🎽|🎿|🛷|🥌|🎯|🪀|🪁|🎱|🔮|🪄|🧿|🎮|🕹|🎰|🎲|🧩|🧸|🪅|🪆|🃏|🀄|🎴|🎭|🖼|🎨|🧵|🪡|🧶|🪢|👓|🕶|🥽|🥼|🦺|👔|👕|👖|🧣|🧤|🧥|🧦|👗|👘|🥻|🩱|🩲|🩳|👙|👚|👛|👜|👝|🛍|🎒|🩴|👞|👟|🥾|🥿|👠|👡|🩰|👢|👑|👒|🎩|🎓|🧢|🪖|📿|💄|💍|💎|🔇|🔈|🔉|🔊|📢|📣|📯|🔔|🔕|🎼|🎵|🎶|🎙|🎚|🎛|🎤|🎧|📻|🎷|🪗|🎸|🎹|🎺|🎻|🪕|🥁|🪘|📱|📲|📞|📟|📠|🔋|🔌|💻|🖥|🖨|🖱|🖲|💽|💾|💿|📀|🧮|🎥|🎞|📽|🎬|📺|📷|📸|📹|📼|🔍|🔎|🕯|💡|🔦|🏮|🪔|📔|📕|📖|📗|📘|📙|📚|📓|📒|📃|📜|📄|📰|🗞|📑|🔖|🏷|💰|🪙|💴|💵|💶|💷|💸|💳|🧾|💹|📧|📨|📩|📤|📥|📦|📫|📪|📬|📭|📮|🗳|🖋|🖊|🖌|🖍|📝|💼|📁|📂|🗂|📅|📆|🗒|🗓|📇|📈|📉|📊|📋|📌|📍|📎|🖇|📏|📐|🗃|🗄|🗑|🔒|🔓|🔏|🔐|🔑|🗝|🔨|🪓|🛠|🗡|🔫|🪃|🏹|🛡|🪚|🔧|🪛|🔩|🗜|🦯|🔗|🪝|🧰|🧲|🪜|🧪|🧫|🧬|🔬|🔭|📡|💉|🩸|💊|🩹|🩺|🚪|🛗|🪞|🪟|🛏|🛋|🪑|🚽|🪠|🚿|🛁|🪤|🪒|🧴|🧷|🧹|🧺|🧻|🪣|🧼|🪥|🧽|🧯|🛒|🚬|🪦|🗿|🪧|🏧|🚮|🚰|🚹|🚺|🚻|🚼|🚾|🛂|🛃|🛄|🛅|🚸|🚫|🚳|🚭|🚯|🚱|🚷|📵|🔞|🔃|🔄|🔙|🔚|🔛|🔜|🔝|🛐|🕉|🕎|🔯|🔀|🔁|🔂|🔼|🔽|🎦|🔅|🔆|📶|📳|📴|💱|💲|🔱|📛|🔰|🔟|🔠|🔡|🔢|🔣|🔤|🅰|🆎|🅱|🆑|🆒|🆓|🆔|🆕|🆖|🅾|🆗|🅿|🆘|🆙|🆚|🈁|🈂|🈷|🈶|🈯|🉐|🈹|🈚|🈲|🉑|🈸|🈴|🈳|🈺|🈵|🔴|🟠|🟡|🟢|🔵|🟣|🟤|🟥|🟧|🟨|🟩|🟦|🟪|🟫|🔶|🔷|🔸|🔹|🔺|🔻|💠|🔘|🔳|🔲|🏁|🚩|🎌|🏴|🏳|🏻|🏼|🏽|🏾|🏿|☺|☹|☠|❣|❤|✋|✌|☝|✊|✍|⛷|⛹|☘|☕|⛰|⛪|⛩|⛲|⛺|♨|⛽|⚓|⛵|⛴|✈|⌛|⏳|⌚|⏰|⏱|⏲|☀|⭐|☁|⛅|⛈|☂|☔|⛱|⚡|❄|☃|⛄|☄|✨|⚽|⚾|⛳|⛸|♠|♥|♦|♣|♟|⛑|☎|⌨|✉|✏|✒|✂|⛏|⚒|⚔|⚙|⚖|⛓|⚗|⚰|⚱|♿|⚠|⛔|☢|☣|⬆|↗|➡|↘|⬇|↙|⬅|↖|↕|↔|↩|↪|⤴|⤵|⚛|✡|☸|☯|✝|☦|☪|☮|♈|♉|♊|♋|♌|♍|♎|♏|♐|♑|♒|♓|⛎|▶|⏩|⏭|⏯|◀|⏪|⏮|⏫|⏬|⏸|⏹|⏺|⏏|♀|♂|⚧|✖|➕|➖|➗|♾|‼|⁉|❓|❔|❕|❗|〰|⚕|♻|⚜|⭕|✅|☑|✔|❌|❎|➰|➿|〽|✳|✴|❇|©|®|™|ℹ|Ⓜ|㊗|㊙|⚫|⚪|⬛|⬜|◼|◻|◾|◽|▪|▫)
Regex 101 Demo(緊湊、不安全的文字表情符號版本)
Regex 101 Demo(長、安全的 unicode 轉義版本)
演示的輸入字符串包括來自
https://unicode.org/emoji/charts/full-emoji-list.html (13.1)
https://unicode.org/emoji/charts-13.1/full-emoji-modifiers.html
工作示例(直接鏈接到 github 上的正則表達式):
/*compile the pattern string into a regex*/ let emoRegex = new RegExp(emojiPattern, "g") /*extracting the emojis*/ let emojis = [..."This 😀👩⚖️is the 🧗♀️text🥣.".matchAll(emoRegex)]; console.log(emojis) /*count of emojis*/ let emoCount = [..."This 😀👩⚖️is the 🧗♀️text🥣.".matchAll(emoRegex)].length console.log(emoCount) /*strip emojis from text*/ let stripped = "This 😀👩⚖️is the 🧗♀️text🥣.".replaceAll(emoRegex, "") console.log(stripped) /*use the pattern string to build a custom regex*/ let customRegex = new RegExp(".*"+emojiPattern+"{3}$") //match a string ending in 3 emojis console.log(customRegex.test("yep three here 😀👩⚖️🥣")) //true console.log(customRegex.test("nope 🥣😀")) //false
<script src="https://gitcdn.link/repo/sweaver2112/Regex-combined-emojis/master/regex.js"></script>
您可以使用正則表達式在輸入文本中檢測它:
/([\uE000-\uF8FF]|\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF])/g
我編寫了以下函數: containsEmojis(input, includeBasic=true)
,它根據 Unicode 規范版本 13 中定義的表情符號列表檢查表情符號的輸入字符串(請參閱https://unicode.org/Public/emoji/13.0 /emoji-sequences.txt ),並允許忽略只能用 3 個字節表示的“基本”表情符號。
下面的代碼片段定義了函數並運行了一些測試用例:
/** * iterates over the code points of an input string and returns true if an emoji is found. * * an emoji is found if the hex code for the character is 5 characters starting with "1F", * or if @includeBasic is true, the character is 4 and starts with one of the prefixes of * a basic emoji as defined in the Unicode specification version 13 * see https://unicode.org/Public/emoji/13.0/emoji-sequences.txt * * @input the string to check * @includeBasic include also the basic emojis that only take 3 characters */ function containsEmojis(input, includeBasic) { if (typeof includeBasic == "undefined") includeBasic = true; for (var c of input) { var cHex = ("" + c).codePointAt(0).toString(16); var lHex = cHex.length; if (lHex > 3) { var prefix = cHex.substring(0, 2); if (lHex == 5 && prefix == "1f") { return true; } if (includeBasic && lHex == 4) { if (["20", "21", "23", "24", "25", "26", "27", "2B", "29", "30", "32"].indexOf(prefix) > -1) return true; } } } return false; } // can be tested as follows: var input; input = "Hello World!"; console.log(input, containsEmojis(input)); input = "Hello 🌎!"; console.log(input, containsEmojis(input)); console.log(input, containsEmojis(input, false)); // now try a basic emoji input = "It sparkles ✨ yay!"; console.log(input, containsEmojis(input)); // pass false for includeBasic console.log(input, containsEmojis(input, false));
首先,您不能依賴 ECMAScript 2018+ 兼容的\\p{Emoji}
(至少在撰寫本文時)。 它確實匹配了一些0123456789#*
非表情符號字符(參見Nino Filiu 的回答)。 請參閱為什么 Unicode 表情符號屬性轉義匹配數字? 更多細節。
要測試 JavaScript 中的字符串中是否有任何表情符號字符,您可以使用以下符合 ECMAScript 2018+ 標准的解決方案(注意u
標志):
const regex_emoji = /[\\p{Extended_Pictographic}\\u{1F3FB}-\\u{1F3FF}\\u{1F9B0}-\\u{1F9B3}]/u; console.log( regex_emoji.test('flowers 123') ); // => false console.log( regex_emoji.test('flowers 🌼🌺🌸') ); // => true
您甚至可以使用此模式提取一個或多個表情符號字符序列(請注意添加的g
標志以查找所有出現的位置,並添加+
以匹配字符類模式的一個或多個連續出現):
const regex_emoji = /[\\p{Extended_Pictographic}\\u{1F3FB}-\\u{1F3FF}\\u{1F9B0}-\\u{1F9B3}]+/gu; console.log( 'flowers 123'.match(regex_emoji) ); // => null console.log( 'flowers 🌼🌺🌸'.match(regex_emoji) ); // => [ "🌼🌺🌸" ]
簡而言之, Extended_Pictographic
Unicode 類別類匹配大多數表情符號字符,但某些Emoji_Components
除外,即淺膚色到深色皮膚模式字符 ( \\u{1F3FB}-\\u{1F3FF}
) 和紅頭發到白頭發的字符( \\u{1F9B0}-\\u{1F9B3}
)。
要從較長的文本中計算或提取表情符號作為單個字符或連續序列的數組(如上面的第二個代碼片段)並對表情符號執行其他操作,您可以使用自定義正則表達式(如Scott Weaver 的回答)。 使用更長的轉義版本更安全。 但是,在UTR #51(版本:13.1)文件的表情符號鍵盤/顯示測試數據中定義了4590 個表情符號字符。 因此,匹配單個表情符號字符的(符合 ES5,甚至在 IE 中也適用)正則表達式是
var EmojiPattern = /[#*0-9]\uFE0F?\u20E3|©\uFE0F?|[®\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA]\uFE0F?|[\u231A\u231B]|[\u2328\u23CF]\uFE0F?|[\u23E9-\u23EC]|[\u23ED-\u23EF]\uFE0F?|\u23F0|[\u23F1\u23F2]\uFE0F?|\u23F3|[\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC]\uFE0F?|[\u25FD\u25FE]|[\u2600-\u2604\u260E\u2611]\uFE0F?|[\u2614\u2615]|\u2618\uFE0F?|\u261D(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642]\uFE0F?|[\u2648-\u2653]|[\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E]\uFE0F?|\u267F|\u2692\uFE0F?|\u2693|[\u2694-\u2697\u2699\u269B\u269C\u26A0]\uFE0F?|\u26A1|\u26A7\uFE0F?|[\u26AA\u26AB]|[\u26B0\u26B1]\uFE0F?|[\u26BD\u26BE\u26C4\u26C5]|\u26C8\uFE0F?|\u26CE|[\u26CF\u26D1\u26D3]\uFE0F?|\u26D4|\u26E9\uFE0F?|\u26EA|[\u26F0\u26F1]\uFE0F?|[\u26F2\u26F3]|\u26F4\uFE0F?|\u26F5|[\u26F7\u26F8]\uFE0F?|\u26F9(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?|\uFE0F(?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\u26FA\u26FD]|\u2702\uFE0F?|\u2705|[\u2708\u2709]\uFE0F?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|\u270F\uFE0F?|[\u2712\u2714\u2716\u271D\u2721]\uFE0F?|\u2728|[\u2733\u2734\u2744\u2747]\uFE0F?|[\u274C\u274E\u2753-\u2755\u2757]|\u2763\uFE0F?|\u2764(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uFE0F(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?)?|[\u2795-\u2797]|\u27A1\uFE0F?|[\u27B0\u27BF]|[\u2934\u2935\u2B05-\u2B07]\uFE0F?|[\u2B1B\u2B1C\u2B50\u2B55]|[\u3030\u303D\u3297\u3299]\uFE0F?|\uD83C(?:[\uDC04\uDCCF]|[\uDD70\uDD71\uDD7E\uDD7F]\uFE0F?|[\uDD8E\uDD91-\uDD9A]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDE01|\uDE02\uFE0F?|[\uDE1A\uDE2F\uDE32-\uDE36]|\uDE37\uFE0F?|[\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20]|[\uDF21\uDF24-\uDF2C]\uFE0F?|[\uDF2D-\uDF35]|\uDF36\uFE0F?|[\uDF37-\uDF7C]|\uDF7D\uFE0F?|[\uDF7E-\uDF84]|\uDF85(?:\uD83C[\uDFFB-\uDFFF])?|[\uDF86-\uDF93]|[\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F]\uFE0F?|[\uDFA0-\uDFC1]|\uDFC2(?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDFC5\uDFC6]|\uDFC7(?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC8\uDFC9]|\uDFCA(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDFCB\uDFCC](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?|\uFE0F(?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDFCD\uDFCE]\uFE0F?|[\uDFCF-\uDFD3]|[\uDFD4-\uDFDF]\uFE0F?|[\uDFE0-\uDFF0]|\uDFF3(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08)|\uFE0F(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?)?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?|[\uDFF5\uDFF7]\uFE0F?|[\uDFF8-\uDFFF])|\uD83D(?:[\uDC00-\uDC07]|\uDC08(?:\u200D\u2B1B)?|[\uDC09-\uDC14]|\uDC15(?:\u200D\uD83E\uDDBA)?|[\uDC16-\uDC3A]|\uDC3B(?:\u200D\u2744\uFE0F?)?|[\uDC3C-\uDC3E]|\uDC3F\uFE0F?|\uDC40|\uDC41(?:\u200D\uD83D\uDDE8\uFE0F?|\uFE0F(?:\u200D\uD83D\uDDE8\uFE0F?)?)?|[\uDC42\uDC43](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC44\uDC45]|[\uDC46-\uDC50](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC51-\uDC65]|[\uDC66\uDC67](?:\uD83C[\uDFFB-\uDFFF])?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?))?|\uDC6A|[\uDC6B-\uDC6D](?:\uD83C[\uDFFB-\uDFFF])?|\uDC6E(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDC70\uDC71](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDC72(?:\uD83C[\uDFFB-\uDFFF])?|\uDC73(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDC74-\uDC76](?:\uD83C[\uDFFB-\uDFFF])?|\uDC77(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDC78(?:\uD83C[\uDFFB-\uDFFF])?|[\uDC79-\uDC7B]|\uDC7C(?:\uD83C[\uDFFB-\uDFFF])?|[\uDC7D-\uDC80]|[\uDC81\uDC82](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDC83(?:\uD83C[\uDFFB-\uDFFF])?|\uDC84|\uDC85(?:\uD83C[\uDFFB-\uDFFF])?|[\uDC86\uDC87](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDC88-\uDC8E]|\uDC8F(?:\uD83C[\uDFFB-\uDFFF])?|\uDC90|\uDC91(?:\uD83C[\uDFFB-\uDFFF])?|[\uDC92-\uDCA9]|\uDCAA(?:\uD83C[\uDFFB-\uDFFF])?|[\uDCAB-\uDCFC]|\uDCFD\uFE0F?|[\uDCFF-\uDD3D]|[\uDD49\uDD4A]\uFE0F?|[\uDD4B-\uDD4E\uDD50-\uDD67]|[\uDD6F\uDD70\uDD73]\uFE0F?|\uDD74(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|\uDD75(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?|\uFE0F(?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDD76-\uDD79]\uFE0F?|\uDD7A(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD87\uDD8A-\uDD8D]\uFE0F?|\uDD90(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDD95\uDD96](?:\uD83C[\uDFFB-\uDFFF])?|\uDDA4|[\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA]\uFE0F?|[\uDDFB-\uDE2D]|\uDE2E(?:\u200D\uD83D\uDCA8)?|[\uDE2F-\uDE34]|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|[\uDE37-\uDE44]|[\uDE45-\uDE47](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDE48-\uDE4A]|\uDE4B(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDE4C(?:\uD83C[\uDFFB-\uDFFF])?|[\uDE4D\uDE4E](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDE4F(?:\uD83C[\uDFFB-\uDFFF])?|[\uDE80-\uDEA2]|\uDEA3(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDEA4-\uDEB3]|[\uDEB4-\uDEB6](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDEB7-\uDEBF]|\uDEC0(?:\uD83C[\uDFFB-\uDFFF])?|[\uDEC1-\uDEC5]|\uDECB\uFE0F?|\uDECC(?:\uD83C[\uDFFB-\uDFFF])?|[\uDECD-\uDECF]\uFE0F?|[\uDED0-\uDED2\uDED5-\uDED7]|[\uDEE0-\uDEE5\uDEE9]\uFE0F?|[\uDEEB\uDEEC]|[\uDEF0\uDEF3]\uFE0F?|[\uDEF4-\uDEFC\uDFE0-\uDFEB])|\uD83E(?:\uDD0C(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD0D\uDD0E]|\uDD0F(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD10-\uDD17]|[\uDD18-\uDD1C](?:\uD83C[\uDFFB-\uDFFF])?|\uDD1D|[\uDD1E\uDD1F](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD20-\uDD25]|\uDD26(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDD27-\uDD2F]|[\uDD30-\uDD34](?:\uD83C[\uDFFB-\uDFFF])?|\uDD35(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDD36(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD37-\uDD39](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDD3A|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD3D\uDD3E](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDD3F-\uDD45\uDD47-\uDD76]|\uDD77(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD78\uDD7A-\uDDB4]|[\uDDB5\uDDB6](?:\uD83C[\uDFFB-\uDFFF])?|\uDDB7|[\uDDB8\uDDB9](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDDBA|\uDDBB(?:\uD83C[\uDFFB-\uDFFF])?|[\uDDBC-\uDDCB]|[\uDDCD-\uDDCF](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDDD0|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1|[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?))?|[\uDDD2\uDDD3](?:\uD83C[\uDFFB-\uDFFF])?|\uDDD4(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDDD5(?:\uD83C[\uDFFB-\uDFFF])?|[\uDDD6-\uDDDD](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])/g;
請參閱正則表達式演示。 最后的g
標志意味着這個正則表達式可以匹配輸入字符串中的所有出現。
該模式是從表情符號列表動態創建的,並使用正則表達式樹進行收縮。
這是符合 ES6+ 的單一表情符號模式(允許使用\\u{XXXXX}
符號),但它有點長。
請參閱此 JavaScript 演示:
var text = 'flowers 🌼🌺🌸'; // Detecting if there is at least one emoji console.log( emoji_detection_regex.test(text) ); // => true // Counting emojis console.log( (text.match(emoji_count_regex) || []).length ); // => 3 // Extracting one by one, single emoji array console.log( text.match(emoji_count_regex) ); // => ["🌼","🌺","🌸"] // Extracting emoji sequences console.log( text.match(emoji_extract_or_remove_regex) ); // => ["🌼🌺🌸"] // Removing emojis console.log( text.replace(emoji_extract_or_remove_regex, '') ); // => 'flowers '
<script src="https://gitcdn.link/repo/stribizhev/Emojis/main/ws_emoji_regex.js"></script>
表情符號正則表達式聲明在https://github.com/stribishev/Emojis/blob/main/ws_emoji_regex.js文件中可用。
像波紋管一樣檢查表情符號
function getEmojiChars(text) {
console.log(text.match(/\ud83c[\udf00-\udfff]|\ud83d[\udc00-\ude4f]|\ud83d[\ude80-\udeff]/g)) ;
}
您將在文本中獲得表情符號數組
我發現另一個對我有用的解決方案:
const example = '👩👩👧👦🪲';
const regexpEmojiPresentation = /\p{Emoji_Presentation}/gu;
console.log(example.match(regexpEmojiPresentation));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.