Flutter无法解析this working regex,并且不返回任何错误或信息。
(?<=id=)[^&]+
但是,当我将其添加到Flutter应用程序中时:
print("before");
new RegExp(r'(?<=id=)[^&]+');
print("after");
它什么也不做,不返回任何错误。 print("after");
永远不会执行。它不会完全冻结应用程序,因为它处于异步状态。
答案 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保持一致:后向,属性转义和命名组。