如何通过全局模式从路径中提取目录?

发布时间:2020-07-07 17:28

当我具有全局模式时,找不到解决方案如何提取路径的特定部分。

我有如下所示的传入文件路径:

'src/features/gui/images/main/effects/lightning/1.png'

我想提取它的特定前导部分(总是路径的开头):

'src/features/gui/images/main/'

我有两个传入的glob模式(模式可能会更改,但始终会指向其中的目录和图像):

  1. 'src/features/*/images/*/'
  2. 'src/features/*/images/*/**/*.{png,jpg,gif}'

我想提取与传入文件路径中的模式#1匹配的目录路径。

我的直觉告诉我这应该是微不足道的,但找不到解决方案。我正在寻找一种仅对字符串(或regexp)进行操作且不对磁盘进行其他glob搜索的解决方案。我已经在NPM上搜索了各种JS模块,但是我发现的所有内容仅在path匹配glob模式而不是实际匹配子字符串时返回。

回答1

至少第一个模式很容易转换为正则表达式(请注意,我假设它们之间的目录名称仅包含\w元字符内的字符),这又使您可以轻松获得所需的子字符串(在这种情况下,捕获组的索引为1):

const regex = /^.*(src\/features\/\w+\/images\/\w+\/).*$/gm;
const str = 'src/features/gui/images/main/effects/lightning/1.png';
const match = regex.exec(str)
console.log(match[1]); // prints src/features/gui/images/main/