Несохраняющие скобки в Dart
Скобки ( ) выполняют две функции -
группировка символов и функцию кармана. А
что делать, если нужно сгруппировать, но
в карман не класть? Для решения такой
проблемы придуманы специальные несохраняющие
скобки (?: ) - они группируют,
но не кладут в карман.
В следующем примере первые скобки нам нужны для группировки, а вторые - для кармана. Однако, и те, и другие скобки сохраняют данные в карман:
var txt = "abab123";
var res = RegExp(r'(ab)+([1-9]+)').firstMatch(txt);
В результате в наших карманах будет следующее:
print(res?.group(0)); // выведет 'abab123'
print(res?.group(1)); // выведет 'ab'
print(res?.group(2)); // выведет '123'
Сделаем так, чтобы первая пара скобок только группировала, но не клала в карман:
var txt = "abab123";
var res = RegExp(r'(?:ab)+([1-9]+)').firstMatch(txt);
В результате в первом кармане будет наше число:
print(res?.group(1)); // выведет '123'