Dart RegExp,为什么抛出FormatException

时间:2014-06-21 18:10:45

标签: regex dart

我不清楚为什么会抛出FormatException:

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

3 个答案:

答案 0 :(得分:3)

您正在尝试背靠背指定多个 范围量词,这会导致异常错误。如果要以这种方式使用捕获组,则需要围绕第一个范围量词结束捕获组,并将以下范围量词放在捕获组之外。

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

由于您使用的是hasMatch,因此您可以删除开始^和结束$锚点,因为如果正则表达式在字符串输入中匹配并且您真的不喜欢,则此函数会返回这里也需要{1,2}

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

答案 1 :(得分:2)

你不能{3}{1,2}。但你可以这样做:

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

仍然无法正确匹配十六进制颜色。

答案 2 :(得分:0)

因为你的正则表达式最后包含{1,2}。没有必要包括这部分。

在正则表达式下就足够了,

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