让所有子串与Dart中的RegExp匹配的最佳方法

时间:2014-12-18 11:05:19

标签: regex dart

我想获得一个与字符串中的RegExp匹配的子字符串列表。这样做的最佳方式是什么?

来自dart:core的RegExp对象具有Iterable<Match> allMatches(String input, [int start=0])方法。这就是我需要的东西,但我希望得到Iings of Strings,而不是匹配。

还有方法String stringMatch(String input),它返回一个String,但只返回第一个匹配。

所以我使用map编写了myslef函数:

Iterable<String> _allStringMatches(String text, RegExp regExp) {
  Iterable<Match> matches = regExp.allMatches(text);
  List<Match> listOfMatches = matches.toList();

  // TODO: there must be a better way to get list of Strings out of list of Matches
  Iterable<String> listOfStringMatches = listOfMatches.map((Match m) {
    return m.input.substring(m.start, m.end);
  });

  return listOfStringMatches;
}

但在我看来,这是非常基本的功能,我无法相信它不在API的任何地方。我想必须有更好的方法来完成这样一个基本任务。

1 个答案:

答案 0 :(得分:5)

如果你的正则表达式包含只有一个(如new RegExp(r'(\S+)')),你可以将你的函数重写为:

Iterable<String> _allStringMatches(String text, RegExp regExp) => 
    regExp.allMatches(text).map((m) => m.group(0));