Javascript Node.js regex:匹配文件时排除路径分隔符
我的文件夹结构如下:Javascript Node.js regex:匹配文件时排除路径分隔符,javascript,node.js,regex,Javascript,Node.js,Regex,我的文件夹结构如下: src | |-- AnimalLib | |-- index.ts | |-- Animal.ts | |-- Mammals | | |-- Cat.ts | | |-- Dog.ts | |-- Reptiles | | |-- Snake.ts | |-- Birds | | |-- Hawk.ts 假设我有一个数组中所有文件的完整路径,例如,['src/AnimalLib/multimals/Cat.ts',…
src
|
|-- AnimalLib
| |-- index.ts
| |-- Animal.ts
| |-- Mammals
| | |-- Cat.ts
| | |-- Dog.ts
| |-- Reptiles
| | |-- Snake.ts
| |-- Birds
| | |-- Hawk.ts
假设我有一个数组中所有文件的完整路径,例如,['src/AnimalLib/multimals/Cat.ts',…]
我想编写一个RegExp,以通用方式选择仅AnimalLib/Animal.ts
和AnimalLib/index.ts
,即不指定文件名
我尝试了以下方法:
/AnimalLib\\.*.ts/
即新的RegExp('AnimalLib'+'\\'+path.sep+'.*.ts')
这将选择AnimalLib
子目录中的文件,即Birds/Hawk.ts
,哺乳类/Cat.ts
等/AnimalLib\\.*.ts/
即新的RegExp('AnimalLib'+'\\'+path.sep+'.*.ts')
在这里,我试着懒洋洋地选择*?.ts
,希望它只选择AnimalLib/
下的文件。没有骰子。这也选择了AnimalLib
/AnimalLib\\(?!\\).*.ts/
即新的RegExp('AnimalLib'+'\'+path.sep+'(?!'+'\'+path.sep+'))'+'.*.ts')
在这里,我尝试使用负前瞻排除路径分隔符,因此无法选择AnimalLib
的子文件夹。我使用的是Windows系统
这也没用/…/
或新的RegExp(…)
格式
到目前为止,唯一有效的方法是排除除\
以外的所有键盘字符:
new RegExp('AnimalLib' + '\\' + path.sep
+ '[- a-zA-Z0-9()\\[\\]{}\'"_!@#$%^&*?:;<>,.|]+'
+ '.ts')
newregexp('AnimalLib'+'\\'+path.sep
+“[-a-zA-Z0-9()\[\]{}\”“\@$%^&*?:;,.|]+”
+“.ts”)
但是,我不喜欢这个解决方案,因为它不容易复制。使用下面的正则表达式只检测AnimalLib目录中的所有
ts
文件
AnimalLib\/[^/]+?\.ts
对于测试,请查看使用以下正则表达式仅检测AnimalLib目录中的所有
ts
文件
AnimalLib\/[^/]+?\.ts
对于测试,请看一看一种可能的方法是使用此正则表达式
\/AnimalLib\/[^\/]*\.ts
:
let arr=['src/AnimalLib/index-app_main.ts','src/AnimalLib/@Animal foo.ts','src/AnimalLib/哺乳类/Cat.ts','src/AnimalLib/哺乳类/Dog.ts','src/AnimalLib/爬行动物/Snake.ts','src/AnimalLib/Birds/Hawk.ts']
var results=arr.filter(x=>x.match(/\/AnimalLib\/[^\/]*\.ts/);
console.log(results);//返回原始值
var results2=arr.reduce((acc,ele)=>{
var res=ele.match(/\/AnimalLib\/[^\/]*\.ts/)
返回res?acc.concat(res):acc;
}, [])
console.log(results2);//retrns仅匹配字符串
一种可能的方法是使用此正则表达式
let arr=['src/AnimalLib/index-app_main.ts','src/AnimalLib/@Animal foo.ts','src/AnimalLib/哺乳类/Cat.ts','src/AnimalLib/哺乳类/Dog.ts','src/AnimalLib/爬行动物/Snake.ts','src/AnimalLib/Birds/Hawk.ts']
var results=arr.filter(x=>x.match(/\/AnimalLib\/[^\/]*\.ts/);
console.log(results);//返回原始值
var results2=arr.reduce((acc,ele)=>{
var res=ele.match(/\/AnimalLib\/[^\/]*\.ts/)
返回res?acc.concat(res):acc;
}, [])
console.log(results2);//retrns仅匹配字符串
此“文件夹结构”仅用于说明。我实际上拥有数组中每个文件的完整路径。如果答案有帮助,请取消链接:AnimalLib\/?()(Animal\.ts | index\.ts)
对不起,不行。问题指定文件名不应是正则表达式的一部分。我可能在AnimalLib
下有200个文件,无法将它们全部列出。AnimalLib\/\w+\.ts
尝试过这个吗?最后一个几乎有效,但斜杠的转义是错误的。我接受了答案a上面的。文件夹结构只是为了说明。我实际上有数组中每个文件的完整路径。如果有帮助,请解开答案:AnimalLib\/?()(Animal\.ts | index\.ts)
对不起,不行。问题指定文件名不应是正则表达式的一部分。我可能在AnimalLib
下有200个文件,无法将它们全部列出。AnimalLib\/\w+\.ts
尝试过这个吗?最后一个几乎有效,但斜杠的转义是错误的。我接受了答案a上面。arr.filter(x=>x.match(/\/AnimalLib\/\w*\.ts/)
如果您知道您的文件将只有字母、数字和/或下划线。我将在文件名中使用连字符。arr.filter(x=>x.match(/\/AnimalLib\/\w*\.ts/)
如果您知道您的文件将只包含字母、数字和/或下划线。我的文件名中也将包含连字符。虽然这样做有效(我已经用类似的解决方案更新了我的问题)我觉得它并没有涵盖所有情况,例如,我的文件名中有一个连字符。我只想排除路径分隔符,并允许所有其他字符。嗯,我明白了,那么您可以使用except运算符[^\/]
。我刚刚编辑了我的帖子,并将其作为一个链接,以查看它是否正常工作。干杯!是的,正在工作。为了使它独立于操作系统,我正在更新新RegExp的答案('AnimalLib'+'\'\'+path.sep+'([^'+'\'+path.sep+']+.ts),其计算结果为/AnimalLib\\\\([^\\]+.ts)/
在Windows上。在进行小编辑后,我将接受此答案。虽然这确实有效(我已使用类似的解决方案更新了我的问题)我觉得它并没有涵盖所有情况,例如,我的文件名中有一个连字符。我只想排除路径分隔符,并允许所有其他字符。嗯,我明白了,那么您可以使用except运算符[^\/]
。我刚刚编辑了我的帖子,并将其作为一个链接,以查看它是否正常工作。干杯!是的,正在工作。为了使其独立于操作系统,我正在更新对新RegExp('Anima')的回答