Флаттер не может разобрать регулярное выражение - PullRequest
0 голосов
/ 31 декабря 2018

Flutter не может проанализировать это рабочее регулярное выражение и не возвращает никаких ошибок или информации.

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

Однако, когда я добавляю его в свое приложение Flutter:

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

Он ничего не делает, не возвращает никаких ошибок.print("after"); никогда не выполняется.Это не полностью заморозить приложение, потому что оно в асинхронном режиме.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Dart, скомпилированный для Интернета, поддерживает lokbehinds, но текущая версия нативного Dart (включая Flutter) не поддерживает lookbehinds ( 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=([^&]+).

0 голосов
/ 31 декабря 2018

Я предполагаю, что это https://github.com/dart-lang/sdk/issues/34935

Приведите поддержку RegExp Дартса в соответствие с JavaScript: lookbehinds, экранирование свойств и именованные группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...