【发布时间】:2018-03-14 06:31:56
【问题描述】:
我有一个这样的文件夹结构:
src
|
|-- AnimalLib
| |-- index.ts
| |-- Animal.ts
| |-- Mammals
| | |-- Cat.ts
| | |-- Dog.ts
| |-- Reptiles
| | |-- Snake.ts
| |-- Birds
| | |-- Hawk.ts
假设我有一个数组中所有文件的完整路径,例如['src/AnimalLib/Mammals/Cat.ts', ...]
我想编写一个 RegExp 以通用方式选择 only AnimalLib/Animal.ts 和 AnimalLib/index.ts,即不指定文件名。
我尝试了以下方法:
-
/AnimalLib\\.*.ts/即new RegExp('AnimalLib' + '\\' + path.sep + '.*.ts')这个选中的文件在
AnimalLib的子目录下,即Birds/Hawk.ts、Mammals/Cat.ts等 -
/AnimalLib\\.*?.ts/即new RegExp('AnimalLib' + '\\' + path.sep + '.*.ts')这里我尝试懒惰地选择
.*?.ts,希望它只会选择AnimalLib/下的文件。没有骰子。这也选中了AnimalLib子目录下的文件 -
/AnimalLib\\(?!\\).*.ts/即new RegExp('AnimalLib' + '\\' + path.sep + '(?!' + '\\' + path.sep + ')' + '.*.ts')这里我尝试排除带有负前瞻的路径分隔符,因此无法选择
AnimalLib的子文件夹。我在 Windows 系统上。这也没有用。
我应该如何构造这个正则表达式?我可以使用/.../ 或new RegExp(...) 格式。
到目前为止唯一有效的方法是排除除\ 之外的每个键盘字符:
new RegExp('AnimalLib' + '\\' + path.sep
+ '[- a-zA-Z0-9()\\[\\]{}\'"_!@#$%^&*?:;<>,.|]+'
+ '.ts')
但是,我不喜欢这种解决方案,因为它不容易重现。
【问题讨论】:
-
arr.filter(x => x.match(/\/AnimalLib\/\w*\.ts/))如果您知道您的文件将只有字母、数字和/或下划线。 -
文件名中也会有连字符。
标签: javascript node.js regex