You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ActiveLabel.swift标记含空格人名失败,求助问题排查与解决办法

问题分析与解决办法

这个问题的核心原因是ActiveLabel.swift默认的提及(mention)检测正则表达式不支持包含空格的用户名。

默认情况下,ActiveLabel使用的mention匹配规则是@\\w+,其中\\w仅匹配字母、数字和下划线,遇到空格就会停止匹配——这就是为什么你只能拿到Kevin而不是完整的Kevin k。

解决步骤:自定义Mention匹配正则

你需要替换默认的正则表达式,让它能够识别包含空格的用户名。以下是具体实现:

myLabel.customize { (label) in 
    label.text = "@Kevin k Hello"
    
    // 自定义正则:匹配@开头,后面跟着Unicode字母、数字或空格,直到遇到空格/字符串结尾
    // 这个规则支持包含空格的用户名,同时避免匹配多余内容
    label.mentionPattern = try! NSRegularExpression(
        pattern: "@([\\p{L}\\p{N}\\s]+)(?=\\s|$)", 
        options: []
    )
    
    label.handleMentionTap({ (mentionString) in
        // 现在mentionString会是完整的"Kevin k"
        guard let url = self.tagsLabelDic[mentionString] else { 
            print("未找到对应用户的URL")
            return 
        }
        // 这里处理你的跳转逻辑,比如打开URL
        if let urlObj = URL(string: url) {
            UIApplication.shared.open(urlObj)
        }
    })
}

正则说明

  • @:匹配提及的起始符号
  • [\\p{L}\\p{N}\\s]+:匹配一个或多个Unicode字母(\\p{L})、数字(\\p{N})或空格(\\s),支持多语言用户名和带空格的情况
  • (?=\\s|$):正向预查,确保匹配的内容后面是空格或者字符串结尾,避免把后续的普通文本也包含进来

额外注意事项

如果你的用户名允许其他特殊字符(比如连字符、点),可以把它们添加到正则的字符集里,比如修改为[\\p{L}\\p{N}\\s\\-\\.]+。

内容的提问来源于stack exchange,提问作者tolerate_Me_Thx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:36:36