Flutter 拆分字符串中的emoji

395 阅读1分钟
期望

输入 "ABCD😊😭E"
输出 ["ABCD", "😊😭", "E"]

实现

  List<String> splitEmoji(String text) {
    final List<String> out = [];
    final pattern = RegExp(
        r'(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])');

    bool curIsEmoji  = false;
    String curText = '';

    for (var element in text.characters) {
      bool isEmoji = pattern.allMatches(element).isNotEmpty;
      if (curIsEmoji == isEmoji) {
        curText += element;
      } else {
        if (curText != '') out.add(curText);
        curText = element;
        curIsEmoji = isEmoji;
      }
    }

    if (curText != '') out.add(curText);

    return out;
  }