2016-08-05 161 views
1

我试图忽略解决方案中的所有*/bin/*,除了node_modules文件夹内的文件夹。所以:如何忽略Mercurial中除node_modules内的所有bin文件夹?

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

glob patter没有处理,所以我想要拿出一个正确的正则表达式。

我想出了:

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

可是,我仍然是错在。 我想匹配的任意字符串/斌/,但如果有一个node_modules在什么地方/斌/

+0

“不忽略”是指不应该有正则表达式匹配?试试'^(?!。* \/node_modules \ /)。* \/bin \ /.*'。 –

回答

1

最可能的是,你不能用一个无限宽度回顾后,你如果你使用你的逻辑,需要在这里。

我建议使用一个超前的开头:

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

先行检查是否有0+不是尽可能多地到最后的/node_modules换行符后跟与\其他字符,然后再次0+不是尽可能多地到最后的/bin/换行字符等(注:最后\/可以(?:$|\/)更换检查/在字符串的结尾)。如果在/bin/之前存在/node_modules/,则该前瞻基本上不能匹配。

.*\/bin\/.*匹配包含/bin/线。

查看regex demo

+0

我想你需要添加。*在你开始负面展望之前.. –

+0

哇!这实际上工作!我在开头添加了一个(?i)以忽略大小写 – Eiver

+0

是的,内联'(?i)'修饰符将打开不区分大小写的搜索。 –

0

你需要把你的负回顾后(?<!..)在你的正则表达式的开始

负回顾后:保证给定的模式不匹配,并在表达式中的当前位置结束。不消耗字符。

/(?<!not)foo/

此不匹配:not foo

这场比赛:but foo

尝试这样的事:

(?<!node_modules).*?(?<!node_modules)\/bin\/(?<!node_modules).* 
相关问题