如何为Ginkgo的--skip flag编写不含指定字符串的正则表达式?
解决Ginkgo --skip 负匹配正则问题
因为Go的正则引擎(RE2)不支持负向前瞻(?!...)语法,所以要实现跳过所有不含"test1"的测试,得用RE2支持的语法构造匹配规则:
最终可用的正则表达式
^[^t]*$|^t[^e]*$|^te[^s]*$|^tes[^t]*$|^test[^1]*$|^(?:.*t[^e].*|.*te[^s].*|.*tes[^t].*|.*test[^1].*)$
如果需要不区分大小写匹配,加上(?i)前缀:
(?i)^[^t]*$|^t[^e]*$|^te[^s]*$|^tes[^t]*$|^test[^1]*$|^(?:.*t[^e].*|.*te[^s].*|.*tes[^t].*|.*test[^1].*)$
用法示例
直接把正则传给--skip参数:
ginkgo --skip="^[^t]*$|^t[^e]*$|^te[^s]*$|^tes[^t]*$|^test[^1]*$|^(?:.*t[^e].*|.*te[^s].*|.*tes[^t].*|.*test[^1].*)$"
规则解释
这个正则通过分段排除的方式,覆盖所有不包含连续"test1"子串的情况:
^[^t]*$:匹配完全不含t的测试名^t[^e]*$:匹配以t开头,但后续没有e的测试名^te[^s]*$:匹配以te开头,但后续没有s的测试名^tes[^t]*$:匹配以tes开头,但后续没有t的测试名^test[^1]*$:匹配以test开头,但后续没有1的测试名- 最后一段:匹配中间出现
t但后续不是e、te后续不是s、tes后续不是t、test后续不是1的所有测试名
这样所有不含"test1"的测试都会被--skip匹配并跳过,符合你的需求。
内容的提问来源于stack exchange,提问作者Anton Asserzon
相关产品推荐
相关产品推荐

