如何忽略除Mercurial中node_modules内的所有bin文件夹?

时间:2016-08-05 09:30:21

标签: regex mercurial

我试图忽略解决方案中的所有* / bin / *,但node_modules文件夹中的文件夹除外。所以:

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

glob模式不能解决这个问题,所以我试图想出一个正确的正则表达式。

我想出了:

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

但有些事情仍然是错误的。 我想匹配任何包含/ bin /的字符串,但是如果在/ bin /

之前某处有某个node_modules则不会

2 个答案:

答案 0 :(得分:1)

如果你使用逻辑,很可能你不能使用你需要的无限宽度外观。

我建议在开头使用前瞻:

^(?!.*\/node_modules(?=\/).*\/bin\/).*\/bin\/.*
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  

前瞻检查除了换行符之外是否有0个以上的字符,直到跟随/node_modules的最后一个\,然后再检查除换行符之外的0 +字符尽可能多,直到最后/bin/(注意:最后\/可以替换为(?:$|\/)以检查字符串末尾的/。如果在/node_modules/之前有/bin/,则此前瞻基本上无法匹配。

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

请参阅regex demo

答案 1 :(得分:0)

你需要在你的正则表达式的开头把你的负面看上去(?<!..)

否定后瞻:确保给定的模式不匹配并在表达式中的当前位置结束。不消耗字符。

/(?<!not )foo/

这不匹配:not foo

这场比赛:but foo

尝试这样的事情:

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