Prexp
Prexp (Path to regular expression) is a Dart package that converts a path to a regular expression.
import 'package:prexp/prexp.dart';
void main() {
final String route = r'/users/:name';
final Prexp prexp = Prexp.fromString(route);
print(prexp.hasMatch('/users/odroe')); // true
final PathMatcher matcher = PathMatcher.fromPrexp(prexp);
print(matcher('/users/odroe')); // (PrexpMatch(/users/Seven, {name: Seven}))
final PathBuilder builder = PathBuilder.fromPath(route);
print(builder({'name': 'odroe'})); // /users/odroe
print(Prexp.parse(
route)); // [StringPrexpToken(/users), MetadataPrexpToken({"name":"name","prefix":"/","suffix":"","pattern":"[^\\/#\\?]+?","modifier":""}]
}
Installation
Add this to your package's pubspec.yaml file:
dependencies:
prexp: latest
Or install it from the command line:
dart pub add prexp
Create a list of PrexpToken
The Prexp.parse static utility to create an list of PrexpToken from a path.
final Iterable<PrexpToken> tokens = Prexp.parse('/users/:name');
Optional parameters
delimiter- The delimiter between segments. Defaults to/#?.prefixes- The prefixes to use when parsing a path. Defaults to./.
Prexp class
Prexp implements the RegExp interface and is compatible with RegExp. The only difference between Prexp and RegExp is that Prexp contains the parameter source information of path.
final Prexp prexp = Prexp.fromString('/users/:name');
print(prexp.hasMatch('/users/odroe')); // true
print(prexp is RegExp); // true
print(prexp.metadata); // MetadataPrexpToken({"name":"name","prefix":"/","suffix":"","pattern":"[^\\/#\\?]+?","modifier":""})
Create a Prexp from a string
final Prexp prexp = Prexp.fromString('/users/:name');
Create a Prexp from a RegExp
final RegExp regexp = ...;
final Prexp prexp = Prexp.fromRegExp(regexp);
Create a Prexp from a list of PrexpToken
final Iterable<PrexpToken> tokens = Prexp.parse('/users/:name');
final Prexp prexp = Prexp.fromTokens(tokens);
Path builder
The PathBuilder class is used to build a path from a map of parameters.
Create a PathBuilder from a path
final PathBuilder builder = PathBuilder.fromPath('/users/:name');
print(builder({'name': 'odroe'})); // /users/odroe
Create a PathBuilder from list of PrexpToken
final Iterable<PrexpToken> tokens = Prexp.parse('/users/:name');
final PathBuilder builder = PathBuilder.fromTokens(tokens);
print(builder({'name': 'odroe'})); // /users/odroe
Path matcher
The PathMatcher class is used to match a path against a route.
Create a PathMatcher from a Prexp
final Prexp prexp = Prexp.fromString('/users/:name');
final PathMatcher matcher = PathMatcher.fromPrexp(prexp);
print(matcher('/users/odroe')); // (PrexpMatch(/users/odroe, {name: odroe}))
Create a PathMatcher from a RegExp
final RegExp regexp = ...;
final Iterable<MetadataPrexpToken> metadata = ...;
final PathMatcher matcher = PathMatcher.fromRegExp(regexp, metadata);
print(matcher('/users/odroe'));
Match a path against a route
final PathMatcher matcher = ...;
final Iterable<PrexpMatch> matches = matcher('/users/odroe');
print(matches); // (PrexpMatch(/users/odroe, {name: odroe}))
Note: If the path does not match the route, the
PathMatcherreturns an empty list.
Libraries
- prexp
- Path to regular expression.