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
相关产品推荐
相关产品推荐

