Spike-Leung / taxodium

My blog
https://taxodium.ink
0 stars 0 forks source link

post/emoji-regexp/ #3

Open utterances-bot opened 1 month ago

utterances-bot commented 1 month ago

Emoji 正则匹配 - Taxodium

""

https://taxodium.ink/post/emoji-regexp/

JunQu commented 1 month ago

我试着使用了上面说的方法,例子中确实是有效的,比如最开始的例子

/\p{Extended_Pictographic}/gu.test("你好hello123😄hi🌷456🉐") // true` 

然而它并非完全有效,比如某些单数字字符的emoji 可能是无效的(好像github 显示不出来)

4️⃣4️⃣4️⃣4️⃣

emiji 来自 https://emojipedia.org/keycap-digit-zero

如果看了 V8 那篇文章,在不考虑兼容性的情况下,带 v 应该是处理这些特殊字符的最好方式,如果是emoji ,那么应该使用

\p{RGI_Emoji}\gv

"你好4️⃣123🉐😄hi🌷".replaceAll(/\p{RGI_Emoji}/gv, "")  // 你好123hi
"你好4️⃣123🉐😄hi🌷".replaceAll(/\p{Extended_Pictographic}/gu, "") // 你好4️⃣123hi
Spike-Leung commented 4 weeks ago

如果看了 V8 那篇文章,在不考虑兼容性的情况下,带 v 应该是处理这些特殊字符的最好方式,如果是emoji ,那么应该使用

\p{RGI_Emoji}\gv

"你好4️⃣123🉐😄hi🌷".replaceAll(/\p{RGI_Emoji}/gv, "")  // 你好123hi
"你好4️⃣123🉐😄hi🌷".replaceAll(/\p{Extended_Pictographic}/gu, "") // 你好4️⃣123hi

学习了,可惜 RegExp.prototype.unicodeSets 对于旧版本的一些浏览器兼容没那么好。

文章里只考虑到了 Emoji 的字符,但是 Emoji 还有序列的形式,还是得再看看规范,了解清楚 Emoji 是如何组成的。

如果不使用 /v,可能使用别人整理好的 emoji-regex 来匹配要更靠谱,它整理了相对比较完整的 Emoji 列表组成正则,应该能符合大部分的使用场景了。

Spike-Leung commented 2 weeks ago

也可以试试这个:

/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|\uA9|\uAE|\u3030/gi

测试的 Emoji:

😄🉐1️⃣👋🧄🤝👩🏻‍🦼♥🫠👍🏽🇨🇳👨‍👩‍👧👨‍👩‍👧👨‍👩‍👧👨‍👩‍👧👨‍👩‍👧👨‍👩‍👧👨‍👩‍👧👨‍👩‍👧🏴‍☠️

以上 Emoji 这条正则都可以匹配。