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

iOS搜索栏:如何根据不区分大小写的搜索词获取原字符串匹配片段

不区分大小写匹配并提取原字符串对应片段

要实现不区分大小写搜索并提取原字符串中的对应片段,不能直接依赖lowercased().contains()(因为会丢失原大小写信息),可以通过正则表达式实现,具体代码如下:

let string = "HELlo WORld"

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    // 过滤空搜索文本
    guard let searchText = searchBar.text, !searchText.isEmpty else { return }
    
    // 创建不区分大小写的正则表达式,自动转义搜索文本中的特殊字符
    guard let regex = try? NSRegularExpression(pattern: NSRegularExpression.escapedPattern(for: searchText), options: .caseInsensitive) else { return }
    
    // 在原字符串中查找所有匹配项
    let matches = regex.matches(in: string, range: NSRange(string.startIndex..., in: string))
    
    // 提取第一个匹配的原字符串片段(如需所有匹配可移除break)
    for match in matches {
        if let swiftRange = Range(match.range, in: string) {
            let originalMatchedText = String(string[swiftRange])
            print(originalMatchedText) // 输入"hello"时输出"HELlo"
            break
        }
    }
}

关键说明:

  • NSRegularExpression.escapedPattern(for:):自动转义搜索文本中的正则特殊字符(比如.、*等),避免正则语法错误
  • .caseInsensitive选项:开启不区分大小写匹配,保证搜索文本不管大小写都能匹配到原字符串对应片段
  • 转换Range:将正则返回的NSRange转换成Swift原生的Range,才能正确从原字符串中截取内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:10:46