正则表达式捕获组迅速

我在字符串中有一个正则表达式搜索方法:

extension String { func searchRegex (regex: String) -> Array { do { let regex = try NSRegularExpression(pattern: regex, options: NSRegularExpressionOptions(rawValue: 0)) let nsstr = self as NSString let all = NSRange(location: 0, length: nsstr.length) var matches : Array = Array() regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all) { (result : NSTextCheckingResult?, _, _) in let theResult = nsstr.substringWithRange(result!.range) matches.append(theResult) } return matches } catch { return Array() } } } 

它运作良好。 但是,如果我有一个正则表达式product_title:\['(.*)'它返回我product_title:[\'Some title bla bla\'但我只需要部分(.*)

我是swift的新手,但在python中这个问题通过使用groups()函数解决了。 如何在swift中使用捕获组。 请举个例子。

NSTextCheckingResult具有numberOfRanges属性和rangeAtIndex()方法,可让您获取各个捕获组的范围。 因此,如果您想要第一个捕获组而不是整个匹配的字符串,则可以将代码修改为:

  var matches : Array = Array() regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all) {(result : NSTextCheckingResult?, _, _) in let capturedRange = result!.rangeAtIndex(1) if !NSEqualRanges(capturedRange, NSMakeRange(NSNotFound, 0)) { let theResult = nsstr.substringWithRange(result!.rangeAtIndex(1)) matches.append(theResult) } }