// // String.swift // Example // // Copyright 2021 Twitter, Inc. // SPDX-License-Identifier: Apache-2.0 // import Foundation extension String { @inlinable public var length: Int { (self as NSString).length } @inlinable public func substring(with range: NSRange) -> String { (self as NSString).substring(with: range) } public func substring(with result: NSTextCheckingResult, at index: Int) -> String? { guard index < result.numberOfRanges else { return nil } let range = result.range(at: index) guard range.location != NSNotFound else { return nil } return substring(with: result.range(at: index)) } public func firstMatch(pattern: String, options: NSRegularExpression.Options = [], range: NSRange? = nil) -> NSTextCheckingResult? { guard let regularExpression = try? NSRegularExpression(pattern: pattern, options: options) else { return nil } let range = range ?? NSRange(location: 0, length: length) return regularExpression.firstMatch(in: self, options: [], range: range) } public func matches(pattern: String, options: NSRegularExpression.Options = [], range: NSRange? = nil) -> [NSTextCheckingResult] { guard let regularExpression = try? NSRegularExpression(pattern: pattern, options: options) else { return [] } let range = range ?? NSRange(location: 0, length: length) return regularExpression.matches(in: self, options: [], range: range) } }