Regex String Extensions

String extensions for regex matching, extraction, and replacement.

← Back
Language: swift | Tags: regex string validation parsing
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}$")