Ios 检测哈希标记并添加到数组

Ios 检测哈希标记并添加到数组,ios,swift,hashtag,Ios,Swift,Hashtag,我有一个UITextField,用户可以在其中编写描述 示例:“这是我的车的图像。对我的粉丝来说也是一个凉爽的阳光背景。” 如何检测标签“car”、“sunshine”和“fans”,并将它们添加到数组中 let frame = CGRect(x: 0.0, y: 0.0, width: 100.0, height: 30.0) let description = UITextField(frame: frame) description.text = "This is a image of

我有一个UITextField,用户可以在其中编写描述

示例:“这是我的车的图像。对我的粉丝来说也是一个凉爽的阳光背景。”

如何检测标签“car”、“sunshine”和“fans”,并将它们添加到数组中

let frame = CGRect(x: 0.0, y: 0.0, width: 100.0, height: 30.0)

let description = UITextField(frame: frame)
description.text = "This is a image of my #car. A cool #sunshine background also for my #fans."


extension String {
    func getHashtags() -> [String]? {
        let hashtagDetector = try? NSRegularExpression(pattern: "#(\\w+)", options: NSRegularExpressionOptions.CaseInsensitive)
        let results = hashtagDetector?.matchesInString(self, options: NSMatchingOptions.WithoutAnchoringBounds, range: NSMakeRange(0, self.utf16.count)).map { $0 }

        return results?.map({
            (self as NSString).substringWithRange($0.rangeAtIndex(1))
        })
    }
}

description.text?.getHashtags() // returns array of hashtags
资料来源:

来源:

检查此pod:

在TwitterText类中有一个方法
(NSArray*)hashtagsInText:(NSString*)text checkingurlapple(BOOL)checkingurlapple

Twitter创建了这个pod来查找#、@、URL,所以在我看来,没有更好的方法可以做到这一点

检查此pod:

在TwitterText类中有一个方法
(NSArray*)hashtagsInText:(NSString*)text checkingurlapple(BOOL)checkingurlapple


Twitter创建了这个pod来查找#、@、URL,所以在我看来,没有更好的方法可以做到这一点

Swift 3版@Anurag的答案:

extension String {
func getHashtags() -> [String]? {
    let hashtagDetector = try? NSRegularExpression(pattern: "#(\\w+)", options: NSRegularExpression.Options.caseInsensitive)
    let results = hashtagDetector?.matches(in: self, options: NSRegularExpression.MatchingOptions.withoutAnchoringBounds, range: NSMakeRange(0, self.characters.count)).map { $0 }

    return results?.map({
        (self as NSString).substring(with: $0.rangeAt(1))
    })
}

}

Swift 3版@Anurag的答案:

extension String {
func getHashtags() -> [String]? {
    let hashtagDetector = try? NSRegularExpression(pattern: "#(\\w+)", options: NSRegularExpression.Options.caseInsensitive)
    let results = hashtagDetector?.matches(in: self, options: NSRegularExpression.MatchingOptions.withoutAnchoringBounds, range: NSMakeRange(0, self.characters.count)).map { $0 }

    return results?.map({
        (self as NSString).substring(with: $0.rangeAt(1))
    })
}

}Swift 4.2版本。最后,我们返回一个没有
#
的hashtags/关键字列表

}

例如

输入
#hashtag1#hashtag2#hashtag3#hashtag4#hashtag5

输出
[hashtag1、hashtag2、hashtag3、hashtag4、hashtag5]
Swift 4.2版本。最后,我们返回一个没有
#
的hashtags/关键字列表

}

例如

输入
#hashtag1#hashtag2#hashtag3#hashtag4#hashtag5

输出
[hashtag1,hashtag2,hashtag3,hashtag4,hashtag5]

@Bartłomiejsemanńczyk-是的,我忘了,但你仍然明白我的意思吗?请阅读以下链接:@Bartłomiejsemanńczyk-是的,我忘了,但是你仍然明白我的意思吗?阅读这个链接:没有理由需要使用第三方垃圾来做一些本机可以轻松完成的事情。下面是两个调用,在使用正则表达式找到这些项目后,你需要使用“hash tags”sh*t。我永远无法理解为什么您需要使用一个Github垃圾块来替代需要两行代码才能部署的东西:[attString addAttribute:NSUnderlineStyleAttributeName值:[NSNumber numberWithInt:NSUnderlineStyleSingle]范围:NSMakerRange(wordRange.location+1,wordRange.length-1)];[attString addAttribute:NSLinkAttributeName值:@”“范围:wordRange]@Larcerax-想解释一下为什么您的代码片段是一件艺术品,而上面发布的是sh*t吗?不确定您是否理解第三方的真正含义。。你的代码是第三方作为一个张贴在上面的任何人想要使用它!不,我的只使用苹果编写的IOS,就是这样,属性字符串的方法包括NSUnderlineStyleSingle和NSLinkAttributeName,然后您只需要在hashtags中正则表达式,找到HastTags后,添加下划线,然后将所需的web链接或应用程序内链接添加到视图控制器。您可以在UITextVews中使用委托截获这些哈希标记发送的消息,截获附加了NSLinkAttributeName的文本,这非常简单。没有任何理由需要使用第三方垃圾来完成本机轻松完成的任务。下面是两个调用“哈希标记”在使用正则表达式查找这些项之后。我永远无法理解为什么您需要使用一个Github垃圾块来替代需要两行代码才能部署的东西:[attString addAttribute:NSUnderlineStyleAttributeName值:[NSNumber numberWithInt:NSUnderlineStyleSingle]范围:NSMakerRange(wordRange.location+1,wordRange.length-1)];[attString addAttribute:NSLinkAttributeName值:@”“范围:wordRange]@Larcerax-想解释一下为什么您的代码片段是一件艺术品,而上面发布的是sh*t吗?不确定您是否理解第三方的真正含义。。你的代码是第三方作为一个张贴在上面的任何人想要使用它!不,我的只使用苹果编写的IOS,就是这样,属性字符串的方法包括NSUnderlineStyleSingle和NSLinkAttributeName,然后您只需要在hashtags中正则表达式,找到HastTags后,添加下划线,然后将所需的web链接或应用程序内链接添加到视图控制器。您可以在UITextVews中使用委托截获这些哈希标记发送的消息,截获附加了NSLinkAttributeName的文本,这非常简单。