No matter what the regular expression is,> 1 capture group will cause this code to crash with the following error.
Application termination due to an uncaught exception "NSRangeException", reason: '- [__ NSCFString substringWithRange:]: Range {9223372036854775807, 0} out of bounds; string length 279 '
public extension String
{
func regexParse(pattern:String, captureGroup:Int, caseSensitive:Bool) ->[String]
{
do
{
var resultsArray = [""]
var caseSensitivity = NSRegularExpressionOptions.CaseInsensitive
if(caseSensitive)
{
caseSensitivity = NSRegularExpressionOptions.init(rawValue: 0)
}
let regex = try NSRegularExpression(pattern: pattern, options: caseSensitivity)
let nsString = self as NSString
let all = NSMakeRange(0, nsString.length)
regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all)
{
(result: NSTextCheckingResult?, _, _) in let theResult = nsString.substringWithRange(result!.rangeAtIndex(captureGroup))
resultsArray.append(theResult)
}
return resultsArray
}
catch
{
print("Invalid regex")
return(["Error"])
}
}
}
source
share