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')的回答