我想搜索字符串中的搜索字词并突出显示字符串中的所有匹配项。搜索NSString并使用省略号显示结果
应该显示搜索词周围的一些文字(...),搜索词应该用粗体字样(NSMutableAttributedString)。
示例:搜索 “文本”
...样品文本喇嘛......更多文本布拉布拉......喇嘛文本布拉布拉...
NSString *haystackString = [[self.searchResults objectAtIndex:indexPath.row] stripHTML];
NSString *needleString = self.searchDisplayController.searchBar.text;
if (!self.searchRegex) {
self.searchRegex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"(?:\\S+\\s)?\\S*%@\\S*(?:\\s\\S+)?", needleString] options:(NSRegularExpressionDotMatchesLineSeparators + NSRegularExpressionCaseInsensitive) error:nil];
}
NSArray *matches = [self.searchRegex matchesInString:haystackString options:kNilOptions range:NSMakeRange(0, haystackString.length)];
NSMutableString *tempString = [[NSMutableString alloc] init];
for (NSTextCheckingResult *match in matches) {
[tempString appendString:@"..."];
[tempString appendString:[haystackString substringWithRange:[match rangeAtIndex:0]]];
[tempString appendString:@"..."];
}
if (tempString) {
cell.textLabel.text = tempString;
}
我当前的代码似乎是缓慢和不支持NSMutableAttributedString呢。有更好的解决方案吗?谢谢!
您是否尝试过使用扫描仪而不是正则表达式? – Wain
我听说NSScanner应该更快,但我不知道如何做到这一点与上面的帖子想要的输出:{点} {前面的字} {空间} {searchterm粗体字} {空间} {word after} {dots} –