Flutter无法解析正则表达式

时间:2018-12-31 10:34:51

标签: regex dart flutter

Flutter无法解析this working regex,并且不返回任何错误或信息。

(?<=id=)[^&]+

但是,当我将其添加到Flutter应用程序中时:

print("before");
new RegExp(r'(?<=id=)[^&]+');
print("after");

它什么也不做,不返回任何错误。 print("after");永远不会执行。它不会完全冻结应用程序,因为它处于异步状态。

2 个答案:

答案 0 :(得分:2)

为Web编译的Dart支持lokbehinds,但当前版本的本机Dart(包括Flutter)不支持向后隐藏(source)。

在您的情况下,您要在特定字符串之后匹配一个字符串。您所需要做的就是在模式中声明一个捕获组,然后访问该子匹配项:

RegExp regExp = new RegExp(r"id=([^&]+)");
String s = "http://example.com?id=some.thing.com&other=parameter; http://example.com?id=some.thing.com";
Iterable<Match> matches = regExp.allMatches(s);
for (Match match in matches) {
    print(match.group(1));
}

输出:

some.thing.com
some.thing.com

在这里,id=([^&]+)匹配id=,然后([^&]+)捕获组#1匹配并将&以外的任何一个或多个字符捕获到组1中。请注意,如果在[?&]之前添加id仅匹配id而不匹配thisid查询参数:[?&]id=([^&]+),则可能会更安全。

答案 1 :(得分:1)

我认为这是https://github.com/dart-lang/sdk/issues/34935

  

将Dart的RegExp支持与JavaScript保持一致:后向,属性转义和命名组。