Remembering all the little details for creating regular expressions can be frustrating – especially if it’s not something that you do every day.
Early this year I mentioned a handy tool for testing NSRegularExpression regular expressions and a few months ago mentioned a library providing an alternative to NSRegularExpression with a verbal syntax for constructing your queries.
Here’s a library that provides an extensive number of add-ons for NSRegularExpression called Objective-C-RegEx-Categories from BendyTree.
The library includes macros for shortening your code, and helpers for testing, finding matches, replacing text and more.
Here’s a set of examples from the readme showing some of the helpers included in Objective-C-RegEx Categories in action:
Rx* rx = RX(@"\\d");
Rx* rx = [Rx rx:@"\\d"];
Rx* rx = [Rx rx:@"\\d" ignoreCase:YES];
//Test if a string matches
BOOL isMatch = [@"2345" isMatch:RX(@"^\\d+$")];
//Get first match
NSString* age = [@"My dog is 3." firstMatch:RX(@"\\d+")];
//Get matches as a string array
NSString* words = [@"Hey pal" firstMatch:RX(@"\\w+")];
// words => @[ @"Hey", @"pal" ]
//Get first match with details
RxMatch* match = [@"12.34, 56.78" firstMatchWithDetails:RX(@"\\d+([.]\\d+)")];
// match.value => @"12.34"
// match.range => NSRangeMake(0, 5);
// match.original => @"12.34, 56.78";
// match.groups => @[ RxMatchGroup, RxMatchGroup ];
//Replace with a template string
NSString* result = [@"My dog is 12." replace:RX(@"\\d+") with:@"old"];
// result => @"My dog is old."
//Replace with a block
NSString* result = [RX(@"\\w+") replace:@"hi bud" withBlock:^(NSString* match){
return [NSString stringWithFormat:@"%i", match.length];
}];
// result => @"2 3"
//Replace with a block that has the match details
NSString* result = [RX(@"\\w+") replace:@"hi bud" withDetailsBlock:^(RxMatch* match){
return [NSString stringWithFormat:@"%i", match.value.length];
}];
// result => @"2 3"
You can find Objective-C-RegEx-Categories on Github here.
A very nice library for simplifying your work with NSRegularExpression.