我使用 jest.js 进行测试。通过添加为 regexp
来“忽略”文件夹的规定图案。
模式对象将如下所示:
"testPathIgnorePatterns": [
"<rootDir>/node_modules/",
"<rootDir>/dist/",
"<rootDir>/src/app/setup-config/(.*)+/.*state.*"
],
在最后一行代码中,我试图从我使用的“setup-config”的任何子项中跳过所有“state”命名的文件夹 regexp
图案。但它不起作用。我尝试使用正则表达式作为 /*/
而不是 (.*)
那也行不通。忽略所有
state
的正确正则表达式是什么? setup-config 子文件夹中的命名文件夹?为了清楚起见,我给出了文件夹结构。
最佳答案
您将 Regex 与 Glob 模式混淆了。了解差异很重要。例如,Jest 的 testMatch
需要一个 Glob,而 testRegex
需要一个正则表达式。testPathIgnorePatterns
需要正则表达式,而不是 Glob。 f/*/
因为 Glob 模式将匹配 f
的子目录,但作为正则表达式,它匹配 f
后跟零个或多个 /
后跟一个 /
,例如“F//////”。
所以你需要找出匹配路径中子目录的正则表达式。(.*)+
作为正则表达式完全没有意义。它的意思是“一个或多个(零个或多个任何字符)🤔。将 *
和 +
像这样组合在逻辑上是没有意义的。使用 .*
或 .+
,而不是同时使用。
您的下一个问题是使用 .
因为它匹配任何字符,包括 /
.这意味着 .*
将匹配所有内容到字符串的末尾。它不会停在第一个 /
,这显然是你想要的。
所以你需要思考:我如何匹配一系列字符作为子目录名称,并让它停在第一个 /
?那将是 [^/]+
,或在完整上下文中:
"<rootDir>/src/app/setup-config/[^/]+/.*state.*"
这应该可以解决问题。ℹ️ Technically
[^/]+
would also match..
(parent dir) and.
(same dir) path tokens, and thus is not guaranteed to match only child directories. I doubt Jest would test such paths against this Regex, so I think you should be fine.
这个正则表达式可能还有一个问题:
.*state.*
.你说"I am trying to skip all "state" named folder(s)"
我不确定这意味着什么。所有带有“状态”字样的文件夹?如果路径末尾的测试文件名(不是目录名)包含单词“state”怎么办?也应该排除吗?因为此模式排除了任何包含“state”一词的任何路径(在我们在前一个模式中匹配的子目录下方)。由于您对此不清楚,因此我假设这不会成为问题。
随时让我知道。
关于javascript - 如何使用正则表达式匹配包含字符串的所有路径,但前提是它们是子文件夹的子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68264651/