在 Dart 中将字符串拆分为单词、标点符号和空格的数组

Split a string into an array of words, punctuation and spaces in Dart

我正在尝试复制此页面上提到的方法:

例如:

var text = "I like grumpy cats. Do you?";
console.log(
  text.match(/\w+|\s+|[^\s\w]+/g)
)

Returns:

[
  "I",
  " ",
  "like",
  " ",
  "grumpy",
  " ",
  "cats",
  ".",
  " ",
  "Do",
  " ",
  "you",
  "?"
]

但我使用的不是 Javascript,而是 Dart。我很难找到这在 Dart 中如何工作的示例,尤其是在格式化正则表达式时。

我试过了,但没有返回标点符号和空格:

dynamic textToWords(String text) {
  // Get an array of words, spaces, and punctuation for a given string of text.
  var re = RegExp(r"\w+|\s+|[^\s\w]+g");
  final words = text != null
      ? re.allMatches(text != null ? text : '').map((m) => m.group(0)).toList()
      : [];
  return words;
}

感谢任何帮助。

删除 RegExp 末尾的 g

此外,text 永远不会为空,因为您将其声明为 String,因此不需要这些空检查。

List<String> textToWords(String text) {
  // Get an array of words, spaces, and punctuation for a given string of text.
  var re = RegExp(r"\w+|\s+|[^\s\w]+");
  final words = re.allMatches(text).map((m) => m.group(0) ?? '').toList();
  return words;
}