Regex
Swifty regular expressions
This is a wrapper for NSRegularExpression that makes it more convenient and type-safe to use regular expressions in Swift.
Install
Add the following to Package.swift:
.package(url: "https://github.com/sindresorhus/Regex", from: "0.1.0")
Usage
First, import the package:
import Regex
Examples
Check if it matches:
Regex(#"\d+"#).isMatched(by: "123")
//=> true
Get first match:
Regex(#"\d+"#).firstMatch(in: "123-456")?.value
//=> "123"
Get all matches:
Regex(#"\d+"#).allMatches(in: "123-456").map(\.value)
//=> ["123", "456"]
Replacing first match:
"123?456".replacingFirstMatch(of: #"\d+"#, with: "")
//=> "?456"
Replacing all matches:
"123?456".replacingAllMatches(of: #"\d+"#, with: "")
//=> "?"
Named capture groups:
let regex = Regex(#"\d+(?<word>[a-z]+)\d+"#)
regex.firstMatch(in: "123unicorn456")?.group(named: "word")?.value
//=> "unicorn"
switch "foo123" {
case Regex(#"^foo\d+$"#):
	print("Match!")
default:
	break
}
switch Regex(#"^foo\d+$"#) {
case "foo123":
	print("Match!")
default:
	break
}
Multiline and comments:
let regex = Regex(
	#"""
	^
	[a-z]+  # Match the word
	\d+     # Match the number
	$
	"""#,
	options: .allowCommentsAndWhitespace
)
regex.isMatched(by: "foo123")
//=> true
API
FAQ
Why are pattern strings wrapped in #?
Those are raw strings and they make it possible to, for example, use \d without having to escape the backslash.
Related
- Defaults – Swifty and modern UserDefaults
- KeyboardShortcuts – Add user-customizable global keyboard shortcuts to your macOS app
- LaunchAtLogin – Add “Launch at Login” functionality to your macOS app
- More…
 
            