#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})$');