Regex by crossroadlabs alternatives and similar libraries
Based on the "Text" category.
Alternatively, view Regex by crossroadlabs alternatives based on common mentions on social networks and blogs.
-
PhoneNumberKit
A Swift framework for parsing, formatting and validating international phone numbers. Inspired by Google's libphonenumber. -
TwitterTextEditor
A standalone, flexible API that provides a full-featured rich text editor for iOS applications. -
RichEditorView
DISCONTINUED. RichEditorView is a simple, modular, drop-in UIView subclass for Rich Text Editing. -
Atributika
Convert text with HTML tags, links, hashtags, mentions into NSAttributedString. Make them clickable with UILabel drop-in replacement. -
Mustard
🌭 Mustard is a Swift library for tokenizing strings when splitting by whitespace doesn't cut it. -
PrediKit
An NSPredicate DSL for iOS, OSX, tvOS, & watchOS. Inspired by SnapKit and lovingly written in Swift. -
AttributedTextView
Easiest way to create an attributed UITextView (with support for multiple links and from html) -
OysterKit
OysterKit is a framework that provides a native Swift scanning, lexical analysis, and parsing capabilities. In addition it provides a language that can be used to rapidly define the rules used by OysterKit called STLR
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Regex by crossroadlabs or a related project?
README
[by Crossroad Labs](./header.png)
Regex
Advanced regular expressions for Swift
Goals
Regex library was mainly introduced to fulfill the needs of Swift Express - web application server side framework for Swift.
Still we hope it will be useful for everybody else.
Features
- [x] Deep Integration with Swift
- [x]
=~
operator support - [x] Swift Pattern Matching (aka
switch
operator) support
- [x]
- [x] Named groups
- [x] Match checking
- [x] Extraction/Search functions
- [x] Replace functions
- [x] With a pattern
- [x] With custom replacing function
- [x] Splitting with a Regular Expression
- [x] Simple
- [x] With groups
- [x] String extensions
- [x] Supports grapheme clusters 👨👩👧
Extra
Path to Regex converter is available as a separate library here: PathToRegex
This one allows using path patterns like /folder/*/:file.txt
or /route/:one/:two
to be converted to Regular Expressions and matched against strings.
Getting started
Installation
Package Manager
Add the following dependency to your Package.swift:
.Package(url: "https://github.com/crossroadlabs/Regex.git", majorVersion: 1)
Run swift build
and build your app.
CocoaPods
Add the following to your Podfile:
pod 'CrossroadRegex'
Make sure that you are integrating your dependencies using frameworks: add use_frameworks!
to your Podfile. Then run pod install
.
Carthage
Add the following to your Cartfile:
github "crossroadlabs/Regex"
Run carthage update
and follow the steps as described in Carthage's README.
Manually
- Download and drop
/Regex
folder in your project. - Congratulations!
Examples
Hello Regex:
All the lines below are identical and represent simple matching. All operators and matches
function return Bool
//operator way, can match either regex or string containing pattern
"l321321alala" =~ "(.+?)([123]*)(.*)".r
"l321321alala" =~ "(.+?)([123]*)(.*)"
//similar function
"(.+?)([123]*)(.*)".r!.matches("l321321alala")
Operator !~
returns true
if expression does NOT match:
"l321321alala" !~ "(.+?)([123]*)(.*)".r
"l321321alala" !~ "(.+?)([123]*)(.*)"
//both return false
Swift Pattern Matching (aka switch
keyword)
Regex provides very deep integration with Swift and can be used with the switch keyword in the following way:
let letter = "a"
let digit = "1"
let other = "!"
//you just put your string is a regular Swift's switch to match to regular expressions
switch letter {
//note .r after the string literal of the pattern
case "\\d".r: print("digit")
case "[a-z]".r: print("letter")
default: print("bizarre symbol")
}
switch digit {
case "\\d".r: print("digit")
case "[a-z]".r: print("letter")
default: print("bizarre symbol")
}
switch other {
//note .r after the string literal of the pattern
case "\\d".r: print("digit")
case "[a-z]".r: print("letter")
default: print("bizarre symbol")
}
The output of the code above will be:
letter
digit
bizarre symbol
Accessing groups:
// strings can be converted to regex in Scala style .r property of a string
let digits = "(.+?)([123]*)(.*)".r?.findFirst(in: "l321321alala")?.group(at: 2)
// digits is "321321" here
Named groups:
let regex:RegexType = try Regex(pattern:"(.+?)([123]*)(.*)",
groupNames:"letter", "digits", "rest")
let match = regex.findFirst(in: "l321321alala")
if let match = match {
let letter = match.group(named: "letter")
let digits = match.group(named: "digits")
let rest = match.group(named: "rest")
//do something with extracted data
}
Replace:
let replaced = "(.+?)([123]*)(.*)".r?.replaceAll(in: "l321321alala", with: "$1-$2-$3")
//replaced is "l-321321-alala"
Replace with custom replacer function:
let replaced = "(.+?)([123]+)(.+?)".r?.replaceAll(in: "l321321la321a") { match in
if match.group(at: 1) == "l" {
return nil
} else {
return match.matched.uppercaseString
}
}
//replaced is "l321321lA321A"
Split:
In the following example, split() looks for 0 or more spaces followed by a semicolon followed by 0 or more spaces and, when found, removes the spaces from the string. nameList is the array returned as a result of split().
let names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand"
let nameList = names.split(using: "\\s*;\\s*".r)
//name list contains ["Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand"]
Split with groups:
If separator contains capturing parentheses, matched results are returned in the array.
let myString = "Hello 1 word. Sentence number 2."
let splits = myString.split(using: "(\\d)".r)
//splits contains ["Hello ", "1", " word. Sentence number ", "2", "."]
Changelog
You can view the [CHANGELOG](./CHANGELOG.md) as a separate document [here](./CHANGELOG.md).
Contributing
To get started, sign the Contributor License Agreement.
by Crossroad Labs
*Note that all licence references and agreements mentioned in the Regex by crossroadlabs README section above
are relevant to that project's source code only.