Dart RegExp, почему это вызывает FormatException

#regex #dart

#регулярное выражение #dart

Вопрос:

Я не понимаю, почему это вызывает FormatException:

 void main(){
  RegExp cssColorMatch = new RegExp(r'^#([0-9a-fA-F]{3}{1,2}$)');
  print(cssColorMatch.hasMatch('#F56'));
}
  

Комментарии:

1. Вы можете проверить свой синтаксис регулярных выражений, используя, например, regex101.com/r/wU7kG7 — он сообщит вам, какая часть является недопустимым синтаксисом.

Ответ №1:

Вы пытаетесь указать несколько кванторов диапазона последовательно, что вызывает ошибку исключения. Вам нужно завершить свою группу захвата вокруг вашего первого квантификатора диапазона и поместить следующий квантификатор диапазона вне группы захвата, если вы хотите использовать его таким образом.

 RegExp re = new RegExp(r"#([0-9a-fA-F]{3}){1,2}");
  

Поскольку вы используете hasMatch, вы можете удалить привязки start ^ и end $ , поскольку эта функция возвращает, если регулярное выражение имеет совпадение при вводе строки, и вам действительно {1,2} здесь тоже не нужно.

 RegExp re = new RegExp(r"#([0-9a-fA-F]{3})");
  

Ответ №2:

Вы не можете этого сделать {3}{1,2} . Но вы можете сделать:

 RegExp cssColorMatch = new RegExp(r'^#((?:[0-9a-fA-F]{3}){1,2})$');
  

который по-прежнему неправильно соответствует шестнадцатеричным цветам.

Комментарии:

1. новое регулярное выражение(r’^ #(([0-9a-fA-F]{3}){1,2})$’) работает для моих вариантов использования, спасибо

Ответ №3:

Потому что ваше регулярное выражение содержит {1,2} в конце. Нет необходимости включать эту часть.

Приведенного ниже регулярного выражения было бы достаточно,

 RegExp cssColorMatch = new RegExp(r'^#([0-9a-fA-F]{3})$');