diff --git a/lib/invokables/invokableregexp.dart b/lib/invokables/invokableregexp.dart index 4de3cec..586a1c7 100644 --- a/lib/invokables/invokableregexp.dart +++ b/lib/invokables/invokableregexp.dart @@ -13,15 +13,38 @@ class InvokableRegExp extends Object with Invokable { Map methods() { return { 'test': (String input) => regExp.hasMatch(input), - //'exec': (String input) => regExp.allMatches(input).toList() - + 'exec': (String input) { + var match = regExp.firstMatch(input); + return match != null ? _getNamedGroups(match) : null; + }, + 'match': (String input) { + return input.split(regExp); + }, + 'search': (String input) => input.indexOf(regExp.toString()), + 'replace': (String input, String replacement) => + input.replaceAll(regExp, replacement), + 'split': (String input) => input.split(regExp), + 'matchAll': (String input) { + List> matches = []; + for (var match in regExp.allMatches(input)) { + matches.add(_getNamedGroups(match)); + } + return matches; + }, }; } + Map _getNamedGroups(RegExpMatch match) { + var namedGroups = {}; + for (var groupName in match.groupNames) { + namedGroups[groupName] = match.namedGroup(groupName)!; + } + return namedGroups; + } + @override Map setters() { // TODO: implement setters throw UnimplementedError(); } - -} \ No newline at end of file +}