iOS开发进阶 - 富文本正则替换表情

原创 2016年11月28日 17:20:11

移动端访问不佳,请访问我的个人博客

最近写项目需要用到富文本解析字符串显示表情,下面是我使用正则替换实现富文本的方式,希望能帮助到大家

先上效果图和demo地址

这里写图片描述

实现过程中需要用到的知识点

  • NSRegularExpression(正则表达式)
  • NSMutableAttributedString(用来显示富文本的string)

废话不多说,直接贴代码:

import UIKit

struct WCLEmojiParse {

    //所有表情对应的字符串
    static let emotions = ["[angry]", "[beers]", "[blush]", "[bomb]", "[cool]", "[flushed]", "[grin]", "[gun]", "[heart]", "[heartseyes]", "[imp]", "[Joy]", "[kiss]", "[ok]", "[persevere]", "[pray]", "[punch]", "[scream]", "[shit]", "[skull]", "[sleeping]", "[smiley]", "[smirk]", "[sob]","[sweat]", "[thumbsup]", "[tongue]", "[unamused]", "[v]", "[weary]", "[wink]", "[yum]"]

    //String的格式
    static let textAttributes = [NSFontAttributeName: UIFont.systemFont(ofSize: 16), NSForegroundColorAttributeName: UIColor.black]
    //正则表达式的格式
    static let pattern = "\\[+[a-z]+\\]"
    //表情的bounds
    static let attachmentBounds = CGRect.init(origin: CGPoint.init(x: 0, y: -5), size: CGSize.init(width: 24, height: 24))

    //MARK: Public Methods
    static func replaceEmoji(_ str: String) -> NSAttributedString {
        //转成NSString
        let originalNSString = str as NSString
        //通过str获得NSMutableAttributedString
        let attStr = NSMutableAttributedString.init(string: str, attributes: textAttributes)
        var regex: NSRegularExpression?
        do {
            regex = try NSRegularExpression.init(pattern: pattern, options: .caseInsensitive)
        } catch let error as NSError {
            print(error.localizedDescription)
        }
        //获取到匹配正则的数据
        if let matches = regex?.matches(in: str, options: .withoutAnchoringBounds, range: NSMakeRange(0,attStr.string.characters.count)) {
            if matches.count > 0 {
                //遍历符合的数据进行解析
                for i in 0..<matches.count {
                    let result = matches[matches.count-i-1]
                    let range = result.range
                    let emojiStr = originalNSString.substring(with: range)
                    //符合的数据是否为表情
                    if emotions.contains(emojiStr) {
                        if let image = UIImage.init(named: emojiStr) {
                            //创建一个NSTextAttachment
                            let attachment    = NSTextAttachment()
                            attachment.image  = image
                            attachment.bounds = attachmentBounds
                            //通过NSTextAttachment生成一个NSAttributedString
                            let rep = NSAttributedString(attachment: attachment)
                            //把表情于之前的字符串替换
                            attStr.replaceCharacters(in: range, with: rep)
                        }
                    }
                }
            }
        }
        return attStr
    }
}

demo地址

以上是简单的富文本显示表情的方式,抛砖引玉,大家见笑了,希望大家能学到东西,谢谢大家的阅读

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang631106979/article/details/53380727

Python多线程下载表情包

-
  • 1970年01月01日 08:00

IOS开发微博中涉及到的一些正则表达式(表情,话题,链接,@)

// 需要正则的字符串 NSString *str = @"#呵呵呵#[偷笑] http://test.com/blah_blah"; // 表情的规则 NSString *emot...
  • args_
  • args_
  • 2016-07-15 16:01:15
  • 1372

iOS 文本与图片表情混排的实现

 2015-09-04 by 木易哥哥 智者精选,每天获取励志认知能量 www.5izhjx.com要实现文图混排效果需要用到的有:富文本NSMutableAttributedString,字符替换s...
  • manyxh
  • manyxh
  • 2015-09-04 15:06:26
  • 3040

iOS中Emoji表情的判断

问题服务器端不支持Emoji表情,因此客户端在上传用户输入时,不能包含Emoji表情。那么,该如何判断字符串中是否含有Emoji呢?...
  • liujinlongxa
  • liujinlongxa
  • 2015-03-11 22:58:13
  • 36751

iOS -字符串替换 富文本的简单使用

NSString *skills = [userAcc.skills stringByReplacingOccurrencesOfString:@"$$" withString:@"、"];     ...
  • Dancer2015
  • Dancer2015
  • 2016-01-20 10:36:00
  • 914

iOS富文本(一)属性化字符串

概述 iOS一些复杂的文本布局一般都是由底层的Core Text来实现的,直到iOS7苹果发布了Text Kit框架,Text Kit能够很简单实现一些复杂的文本样式以及布局,而Text Kit富文...
  • GGGHub
  • GGGHub
  • 2015-10-26 19:39:24
  • 3168

iOS富文本编辑(在label里显示文字和图片)

在开始写之前先看一下效果图 在此效果图中有富文本中指定的位置添加图片,还有最后位置添加的图片信息 代码如下    1:创建富文本,设置样式 // 添加单个属性 //- (void)add...
  • whuizhou
  • whuizhou
  • 2016-01-04 18:38:50
  • 3148

IOSUITextView图文混排显示文本和表情

参考资料:https://github.com/joeytat/JTATEmojiViewController类using System;using UIKit; using Foundation;n...
  • honeycandys
  • honeycandys
  • 2016-01-05 17:44:37
  • 1866

iOS开发emoji处理方式大起底

总结就一点内容:就iOS和Android端来说,不需要任何处理,将emoji字符上传到服务器,需要的时候服务器原样返回就OK,服务器数据库存储做好相应的处理。 原文地址:http://blo...
  • allanGold
  • allanGold
  • 2016-06-16 09:15:15
  • 5026

iOS_富文本的图文混排

之前写过,改变字体颜色字号等功能,这次咱们来来看看,NSMutableAttributedString 的延伸使用,富文本编辑,效果与图文混排类似。...
  • siwen1990
  • siwen1990
  • 2016-07-12 16:38:26
  • 2025
收藏助手
不良信息举报
您举报文章:iOS开发进阶 - 富文本正则替换表情
举报原因:
原因补充:

(最多只允许输入30个字)