javascript - 如何使用正则表达式匹配包含字符串的所有路径,但前提是它们是子文件夹的子文件夹?

标签 javascript regex

我使用 jest.js 进行测试。通过添加为 regexp 来“忽略”文件夹的规定图案。
模式对象将如下所示:

 "testPathIgnorePatterns": [
      "<rootDir>/node_modules/",
      "<rootDir>/dist/",
      "<rootDir>/src/app/setup-config/(.*)+/.*state.*"
    ],
在最后一行代码中,我试图从我使用的“setup-config”的任何子项中跳过所有“state”命名的文件夹 regexp图案。但它不起作用。我尝试使用正则表达式作为 /*/而不是 (.*)那也行不通。
忽略所有 state 的正确正则表达式是什么? setup-config 子文件夹中的命名文件夹?
为了清楚起见,我给出了文件夹结构。
Folder-structure

最佳答案

您将 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/

相关文章:

php - 识别第二个实例

javascript - 如何在 HTML 脚本标记中使用 Javascript 对浏览器中的连续事件进行计时?

javascript - 没有/低 alpha 的 Canvas PutImageData 颜色丢失

regex - 如何编写正则表达式来检查单词是否以字母开头并包含 {3,6} 数字和字母?

r - 使用 R 中的 gsub 部分替换字符串中的正则表达式模式?

javascript - 使用正则表达式替换删除 bb 代码

javascript - 无法在索引页中运行 Node 文件

javascript - 如何确保秒表功能在移动浏览器上继续运行

javascript - 更改 mapbox 集群 map 中的文本颜色

Java - 如何使用匹配器编写可选的正则表达式模式