Regex 如何忽略Mercurial中除了节点_模块内的所有bin文件夹?

Regex 如何忽略Mercurial中除了节点_模块内的所有bin文件夹?,regex,mercurial,Regex,Mercurial,我试图忽略解决方案中的所有*/bin/*,但节点\模块文件夹中的文件夹除外。因此: /something/file.txt <- not ignored /something/bin/file.txt <- ignored /something/node_modules/anything/bin/file.txt <-not ignored /something/file.txt您需要在正则表达式的开头添加负查找(?) 负查找:确保给定的模式不匹配并在表达式中的当前位置结束

我试图忽略解决方案中的所有*/bin/*,但节点\模块文件夹中的文件夹除外。因此:

/something/file.txt <- not ignored 
/something/bin/file.txt <- ignored
/something/node_modules/anything/bin/file.txt <-not ignored

/something/file.txt您需要在正则表达式的开头添加负查找
(?)

负查找:确保给定的模式不匹配并在表达式中的当前位置结束。不使用字符

使用
/(

此项不匹配:
非foo

此匹配:
但foo

试着这样做:

(?<!node_modules).*?(?<!node_modules)\/bin\/(?<!node_modules).*

(?如果使用逻辑,很可能无法使用此处所需的无限宽度查找

我建议在开始时使用前瞻:

^(?!.*\/node_modules(?=\/).*\/bin\/).*\/bin\/.*
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
前瞻检查在最后一个
\
模块之前,是否有0+个字符(除换行符外)尽可能多,后面跟
\
,然后再次检查在最后一个
/bin/
模块之前,是否有0+个字符(除换行符外),尽可能多(注意:最后一个
\/
可以替换为
(?:$)\/)
检查字符串末尾的
/
)。如果在
/bin/
之前有一个
/node\u modules/
,则此前瞻基本上会导致匹配失败

*\/bin\/.*
与包含
/bin/
的行匹配


请参见

“未忽略”表示不应存在正则表达式匹配?请尝试
^(?。*/node\u modules\/).\/bin\/.
。哇!这确实有效!我在开始时添加了一个(?I)来忽略大小写是的,内联
(?I)
修饰符将启用不区分大小写的搜索。
^(?!.*\/node_modules(?=\/).*\/bin\/).*\/bin\/.*
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^