Regex String Extensions
String extensions for regex matching, extraction, and replacement.
extension String {
/// Extract all matches for a pattern
func matches(for pattern: String) -> [String] {
guard let regex = try? NSRegularExpression(pattern: pattern) else {
return []
}
let range = NSRange(startIndex..., in: self)
return regex.matches(in: self, range: range).compactMap {
guard let range = Range($0.range, in: self) else { return nil }
return String(self[range])
}
}
/// Replace with regex pattern
func replacing(pattern: String, with replacement: String) -> String {
guard let regex = try? NSRegularExpression(pattern: pattern) else {
return self
}
let range = NSRange(startIndex..., in: self)
return regex.stringByReplacingMatches(in: self, range: range, withTemplate: replacement)
}
/// Check if string matches pattern
func matches(regex pattern: String) -> Bool {
range(of: pattern, options: .regularExpression) != nil
}
}
// Usage:
// let emails = text.matches(for: "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")
// let cleaned = text.replacing(pattern: "\s+", with: " ")
// let isValid = phone.matches(regex: "^\d{3}-\d{3}-\d{4}$")