通过正则表达式的 split 函数分割表情符号字符串

2024-01-10

我想使用 Javascript 的 split 函数来分割表情符号字符串。 stackoverflow上有很多类似的问题,但我找不到任何完整的解决方案。所以我用我自己的方式来做:

a) 将 split 函数与正则表达式结合使用。

b) 通过正则表达式 unicode 匹配拆分表情符号字符:从 \uD800 到 \uDBFF 以及从 \uDC00 到 \uDFFF。

c) 在此正则表达式中,排除带连接符的零 (\u200D) 和变体选择器 (\uFE0F) 字符。 所以我写如下:

var p = '????????????????????????????????????????????‍????‍????‍????????????????‍❤️‍????‍????';

并将其拆分:

var split = p.split(/(?![\u200D\uFE0F])([\uD800-\uDBFF][\uDC00-\uDFFF])/);

但结果是错误的:(

["", "????", "", "????", "", "????", "", "????", "", "????", "", "????", "", "????", "", "????", "", "????", "", "????", "", "????", "‍", "????", "‍", "????", "‍", "????", "", "????", "", "????", "", "????", "‍❤️‍", "????", "‍", "????", ""]

我是否使用了正则表达式的排除选择器?如果正确的话,是我的想法造成的错误吗? 预期结果需要为:["????????", "????????", "????????", "????????", "????????", "????‍????‍????‍????", "????", "????" , "????‍❤️‍????‍????"]

===

我想更新信息。我为我的网站解决了这个问题:表情符号在线 https://www.emojionline.org。你可以测试一下。我只是使用包含所有表情符号的字典,然后使用替换功能将每个表情符号替换为 |emoji|。我可以用符号|分割字符串表情符号。效果很好:)


我延长了表情符号正则表达式 https://www.npmjs.com/package/emoji-regex作者:Mathias Bynens[\uD800-\uDBFF][\uDC00-\uDFFF](?:[\u200D\uFE0F][\uD800-\uDBFF][\uDC00-\uDFFF]){2,}选择。它匹配一个常见的 2 字节表情符号,后跟 2 个或更多序列(这可以通过{2,}零宽度连接符或变体选择器的限制量词)以及常见的 2 字节表情符号字符。

如果没有替代方案,结果是[ '????????','????????','????????','????????','????????','????‍????‍????','????','????','????','????‍❤️‍????‍????' ].

var p = 'my family ????????????????????????????????????????????‍????‍????‍????????????????‍❤️‍????‍???? here';
var rx = /([\uD800-\uDBFF][\uDC00-\uDFFF](?:[\u200D\uFE0F][\uD800-\uDBFF][\uDC00-\uDFFF]){2,}|\uD83D\uDC69(?:\u200D(?:(?:\uD83D\uDC69\u200D)?\uD83D\uDC67|(?:\uD83D\uDC69\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]\uFE0F|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC6F\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3C-\uDD3E\uDDD6-\uDDDF])\u200D[\u2640\u2642]\uFE0F|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F\u200D[\u2640\u2642]|(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642])\uFE0F|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC69\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708]))\uFE0F|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83D\uDC69\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]))|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\u200D(?:(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDD1-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])?|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])\uFE0F)/;
var res = p.split(rx).filter(Boolean);
document.body.innerHTML = res;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过正则表达式的 split 函数分割表情符号字符串 的相关文章

随机推荐

  • 将数据库添加到树莓派 kubernetes 集群

    我对 k8s 相当陌生 所以如果我误用了 k8s 术语 请原谅我 我希望有人能给我指出正确的方向并建议最好的方法 我有一个 k8s 集群运行在一组树莓派上 我想添加一个所有工作人员都可以访问的数据库卷 我计划使用 USB 外部驱动器来存储数
  • 通过 javascript 打开 facebook 连接窗口?

    当有人尝试通过 Facebook 登录我的网站时 他会被重定向到一个页面 在该页面中他会看到所有请求的权限 然后单击以允许 禁止它们 有什么方法可以通过 javascript 打开此页面作为分层窗口 而无需用户离开我的网站吗 例如 当 fa
  • 悬停时淡入边框

    我想在悬停时淡入边框 我有以下内容 但一开始什么也没有 然后变成 1px 灰线 灰色是默认颜色 然后最终变成 2px 红线 我到底出了什么问题 a border bottom none transition border bottom 1s
  • Telerik MVC:使用ajax请求加载网格不起作用

    我有一个 Telerik MVC Tabstrip 我用过了 LoadContentFrom Grid Orders 网格 操作仅返回没有模型的视图 然后应该触发 Ajax 请求来获取数据 它正在正常加载网格 但没有调用 Ajax 请求来填
  • 从 Angular 6 迁移到 Angular 7

    我最近将我的 Angular 4 应用程序升级到 Angular 6 现在想升级到 Angular 7 根据下面的文章 运行以下命令应该不会超过 10 分钟即可升级 ng 更新 Angular cli Angular Core https
  • Python list.clear复杂性[重复]

    这个问题在这里已经有答案了 Python 3方法的复杂度是多少list clear 这里没有给出 https wiki python org moin TimeComplexity https wiki python org moin Ti
  • 为什么片段有默认构造函数?

    Fragment中有默认构造函数 我想知道它的用途以及它提供什么功能 我在没有它的情况下运行代码 它工作完美 并且在删除它时我找不到任何错误 public class SongListFragment extends Fragment pr
  • 在 Java 中使用多行“and”或“or”格式化“if”语句的正确方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 显然 如果 和 和 或 是非常通用的搜索参数 我一生都无法在谷歌上找到答案 根据 Java 标准 以下哪种格式是正确的 Option 1 if
  • 枚举本地化

    如何本地化枚举ListBoxFor哪里可以有多种选择 例如一个enum包含角色 public enum RoleType Display Description Administrator ResourceType typeof Resou
  • 在 dealloc 中使 NSTimer 失效

    下列的这个问题 https stackoverflow com q 3478361 865175 更具体地说 这条评论 https stackoverflow com questions 3478361 best time to inval
  • 返回非正数时函数更改变量地址

    所以我有一个函数 它获取变量的地址并将数字放入其中 我需要这个函数来对输入进行所有检查 因为我的老师喜欢放类似的东西 123 ABV00000012 当要求只输入一个数字时 问题是 当数字为负数时 它会以某种方式更改我的变量的地址 并只给我
  • 反序列化触发函数

    我有一个包含许多字段的类 这些字段通常是在构造函数中根据类中的其他数据计算的 它们不会序列化为 XML 因为对其余数据的任何更改都可能需要重新计算 有没有办法设置在反序列化时触发的函数调用 你所描述的是 OnDeserialized htt
  • XStream 序列化和反序列化中的多态性

    我有这些课程 XStreamAlias person public class PersonConfig private AnimalConfig animalConfig public interface AnimalConfig XSt
  • Response.Flush() 仅适用于 Firefox

    我试图在做一些冗长的工作之前向客户发送一些内容 Response Write Processing Response Flush System Threading Thread Sleep 5000 Response Write Finis
  • 谷歌地图 iOS SDK:用作标记的自定义图标

    Android API 为此提供了一个非常方便的类 IconGenerator http googlemaps github io android maps utils javadoc com google maps android ui
  • 如何解决基本标签的问题?

    我的基本标签有问题 看起来像 除了这个查询之外 一切正常 get application soft calendar month change php 我的计算机认为它是跨域服务器并将查询更改为选项 当我删除基本标签时 它可以正常工作 但我
  • 发布订阅延迟达到分钟

    我一直在开发一个在 Node js 灵活运行时上利用 Gcloud pubsub 平台的项目 由于某种原因 出现了一些相当疯狂的延迟 并且随着时间的推移 延迟的严重程度不断增加 起初 只有某种类型的消息有时会经历严重的延迟 然而 随着我过去
  • 在 C# 中从 XML 中删除所有属性的最简单方法是什么?

    我想从 XML 中删除所有标签的属性 我只想保留标签及其内部值 在 C 中执行此操作最简单的方法是什么 static void removeAllAttributes XDocument doc foreach var des in doc
  • 计算拟合框数量的算法

    我有一个客户卖酒瓶 他使用可容纳 6 瓶 12 瓶 18 瓶和 21 瓶的盒子 但他只想接受完全适合这些盒子的订单 里面不能有任何空白 E g 33 即可 1x21 和 2x6 48 即可 2x21 和 1x6 或 4x12 26 35 6
  • 通过正则表达式的 split 函数分割表情符号字符串

    我想使用 Javascript 的 split 函数来分割表情符号字符串 stackoverflow上有很多类似的问题 但我找不到任何完整的解决方案 所以我用我自己的方式来做 a 将 split 函数与正则表达式结合使用 b 通过正则表达式