Dart说Regexp有无效的量词,但它适用于JavaScript - 一个错误?

时间:2014-07-25 09:44:47

标签: regex dart

我有一个RegExp:

color:\s*+(?!(?:transparent|inherit)(?:;|$))[^@;][^;]*;?

这显然适用于regex1010.com http://regex101.com/r/aU1nR4/5

但是如果你将这个表达式用于Dart,例如,如果你粘贴这个代码:

void main() {
    new RegExp(r"color:\s*+(?!(?:transparent|inherit)(?:;|$))[^@;][^;]*;?");
}

进入http://try.dartlang.org/你会得到:

InternalError: uncaught exception: FormatException: Illegal RegExp pattern: color:\s*+(?!(?:transparent|inherit)(?:;|$))[^@;][^;]*;?, SyntaxError: invalid quantifier
$.wrapException@blob:98037409-a6ed-4af3-b17a-97b022530853:218:5
$.throwExpression@blob:98037409-a6ed-4af3-b17a-97b022530853:223:3
$.JSSyntaxRegExp_makeNative@blob:98037409-a6ed-4af3-b17a-97b022530853:411:3
$.JSSyntaxRegExp$@blob:98037409-a6ed-4af3-b17a-97b022530853:399:3
$.main@blob:98037409-a6ed-4af3-b17a-97b022530853:148:3
@blob:98037409-a6ed-4af3-b17a-97b022530853:515:5
@blob:0dee36e0-efe3-40e2-93f5-4fac9fc4fec3:1:61

我的RegExp是否有问题,或者可能是某种Dart错误?

2 个答案:

答案 0 :(得分:2)

你可以试试下面的正则表达式而不是你的,

^color:(?!@|transparent|inherit| @| transparent| inherit).*;$

DEMO

答案 1 :(得分:1)

Avinash Raj 解决方案添加更多(事实上更少)可能会更好:

^color:(?!\s*@|\s*transparent|\s*inherit).*;$

因为它在透明,继承或@之前适用于任何空格字符,而不仅仅适用于非空格和一个whitepsace

DEMO