如何在 Dart 中用多个分隔符分割字符串

Jan*_*sen 0 split dart

如果我有一个像这样的字符串:

final myFancyCodez = "AA-BB.CC_DD.EE";
Run Code Online (Sandbox Code Playgroud)

如何将其拆分为多个分隔符?

expect(fancy.multiSplit( ["-", "."] ), ["AA", "BB", "CC_DD", "EE"] );
expect(fancy.multiSplit( []         ), ["AA-BB.CC_DD.EE"]          );
expect(fancy.multiSplit( ['_']      ), ["AA-BB.CC", "DD.EE"]       );
Run Code Online (Sandbox Code Playgroud)

jul*_*101 7

我个人会使用类似的方法,而不是将分隔符组合成单个正则表达式并使用以下split方法:

import 'package:test/test.dart';

void main() {
  const fancy = "AA-BB.CC_DD.EE";

  test('Some tests', () {
    expect(fancy.multiSplit(["-", "."]), ["AA", "BB", "CC_DD", "EE"]);
    expect(fancy.multiSplit([]), ["AA-BB.CC_DD.EE"]);
    expect(fancy.multiSplit(['_']), ["AA-BB.CC", "DD.EE"]);
  });
}

extension UtilExtensions on String {
  List<String> multiSplit(Iterable<String> delimeters) => delimeters.isEmpty
      ? [this]
      : this.split(RegExp(delimeters.map(RegExp.escape).join('|')));
}
Run Code Online (Sandbox Code Playgroud)