gpt4 book ai didi

javascript - Node.js 正则表达式 : exclude path separator while matching files

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:49 25 4
gpt4 key购买 nike

我的文件夹结构如下:

src
|
|-- AnimalLib
| |-- index.ts
| |-- Animal.ts
| |-- Mammals
| | |-- Cat.ts
| | |-- Dog.ts
| |-- Reptiles
| | |-- Snake.ts
| |-- Birds
| | |-- Hawk.ts

假设我有数组中所有文件的完整路径,例如['src/AnimalLib/Mammals/Cat.ts', ...]

我想编写一个正则表达式以通用方式 AnimalLib/Animal.tsAnimalLib/index.ts 选择,即不指定文件名称。

我尝试了以下方法:

  1. /AnimalLib\\.*.ts/new RegExp('AnimalLib' + '\\' + path.sep + '.*.ts')

    这选择了AnimalLib子目录中的文件,即Birds/Hawk.tsMammals/Cat.ts

  2. /AnimalLib\\.*?.ts/new RegExp('AnimalLib' + '\\' + path.sep + '.*.ts')

    这里我尝试懒惰地选择.*?.ts,希望它只选择AnimalLib/下的文件。没有骰子。这还选择了 AnimalLib

  3. 子目录中的文件
  4. /AnimalLib\\(?!\\).*.ts/new RegExp('AnimalLib' + '\\' + path.sep + '(?!' + '\\' + path.sep + ')' + '.*.ts')

    这里我尝试使用负前瞻排除路径分隔符,因此无法选择 AnimalLib 的子文件夹。我在Windows系统上。

    这也不起作用。

我应该如何构建这个正则表达式?我可以使用 /.../new RegExp(...) 格式。

到目前为止唯一有效的方法是排除除 \ 之外的所有键盘字符:

new RegExp('AnimalLib' + '\\' + path.sep 
+ '[- a-zA-Z0-9()\\[\\]{}\'"_!@#$%^&*?:;<>,.|]+'
+ '.ts')

但是,我不喜欢这个解决方案,因为它不容易重现。

最佳答案

一种可能的方法是使用此正则表达式\/AnimalLib\/[^\/]*\.ts:

let arr = ['src/AnimalLib/index-app_main.ts', 'src/AnimalLib/@Animal-foo.ts', 'src/AnimalLib/Mammals/Cat.ts', 'src/AnimalLib/Mammals/Dog.ts', 'src/AnimalLib/Reptiles/Snake.ts', 'src/AnimalLib/Birds/Hawk.ts']

var results = arr.filter(x => x.match(/\/AnimalLib\/[^\/]*\.ts/));
console.log(results); // returns original values

var results2 = arr.reduce((acc, ele) => {
var res = ele.match(/\/AnimalLib\/[^\/]*\.ts/)
return res ? acc.concat(res) : acc;
}, [])
console.log(results2); // retrns only matches string

查看它的工作情况 here

关于javascript - Node.js 正则表达式 : exclude path separator while matching files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49271091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com