【问题标题】:Regex Exclude folder from path正则表达式 从路径中排除文件夹
【发布时间】:2018-08-21 02:34:35
【问题描述】:

我有一堆这样的文件

/foo/bar/specs/d.js
/foo/bar/spec/d.js
/foo/bar/specs/v.js
/foo/bar/specs/v.js
/node_modules/bar/specs/v.js

我需要一个正则表达式,它将排除 node_modules 下的所有内容

类似这样的:

(?!node_modules)\/.*\/specs\/.*\.js

不幸的是,它不起作用

感谢您的帮助。

【问题讨论】:

  • 这里,拿着这个sword。穿过regex 森林,它将为您提供很好的服务。
  • @Learnonhardway 这是一个直率的:)
  • 我们需要有关您的特定用例的更多信息,以便为您的问题推荐合适的解决方案。看起来你可能想多了这个问题。这种模式是否与 webpack 等预处理器匹配?
  • @JasonWarta 只是从 diff 目录加载一堆文件....需要排除 node_modules 下的文件
  • @Learnonhardway 我真的很喜欢剑,谢谢

标签: javascript regex regex-lookarounds


【解决方案1】:

大概是这样的吧?

let arr = [
    '/foo/bar/specs/d.js',
    '/foo/bar/specs/d.js',
    '/foo/bar/specs/v.js',
    '/foo/bar/specs/v.js',
    '/node_modules/bar/specs/v.js'
]

arr.forEach(s => console.log(/^\/(?!node_modules).*\/.*\/specs\/.*\.js/.test(s)))

【讨论】:

  • 谢谢你,但我想要相反...选择除 node_modules 之外的所有内容
  • @revo 他在回复我之前的编辑,而我的做法完全相反......
  • 你不需要那么多额外的斜线:^\/(?!node_modules).*\/specs\/.*\.js$
【解决方案2】:

这是一个获取不在 .git 或 node_modules 文件夹中的 .ts 和 .js 文件的正则表达式:

^(?!.*\/(node_modules|\.git)\/).*(.ts|.js)$

解释:

  • 字符串开始:^
  • 不在组内:(?!.*\/(node_modules|\.git)\/)
  • 包括文件类型组:(.ts|.js)
  • 字符串结尾:$

【讨论】: