在Java中,您可以使用类似这样的assert()语句:
// ok
assertFalse(",", Boolean.FALSE);
assertFalse("", Boolean.FALSE);
assertFalse("ab" + "cd" + "de", Boolean.FALSE);
assertFalse(errorMessage, Boolean.FALSE);
assertFalse(errorMessage.toString(), Boolean.FALSE);
assertFalse("Assertion failed, because: " + errorMessage.toString(), Boolean.FALSE);
// nok
assertFalse(Boolean.FALSE);
assertFalse(expectedMessage.endsWith("ab,cd"));
从代码样式的角度来看,如果断言将断言错误消息作为第一个参数并且 NOK = Not OK ,则将断言定义为 OK 不存在。
话虽如此,我需要一个正则表达式,在圆括号()中搜索没有逗号的断言。字符串常量中的逗号(由引号“分隔)也必须被排除,因为它们会导致误报。
我最终得到了这个正则表达式,显然没有考虑引号,因为我无法让那些为我工作的人:
assert(False|NotNull|Null|True)\(\s*.*(?!,).*\s*\);
我们还使用需要三个逗号的assertEquals
和assertSame
,但这可能是一个单独的正则表达式。
有关于此的任何想法或解决方案吗?我们怎样才能找到只有一个参数的assertFalse()语句?
请不要提供任何其他工具或插件,因为禁止使用它们。只是纯正的正则表达式。谢谢。
答案 0 :(得分:2)
assert(?:False|(?:Not)?Null|True)\([^(),]*(?:\([^)]*\))*\);
assert
按字面意思匹配(?:False|(?:Not)?Null|True)
匹配False
,NotNull
,Null
或True
\(
按字面意思匹配(
[^(),]*
匹配除(
,)
或,
(?:\([^)]*\))*
符合以下任意次数
(
,后跟除)
以外的任何字符,然后按)
\);
按字面意思匹配);
但是,要正确捕获这些实例,最好编写解析器,因为Java的正则表达式引擎不允许递归或平衡。这意味着正则表达式(就像我提供的那样)会在()
内的()
嵌套assertFalse(something(somethingelse()));
中断,例如configFile: path.join(__dirname+'../test/karma.conf.js'),
。如果您不关心这些情况,那么您可以使用正则表达式,否则,我建议您创建解析器或使用其他方法。