2016-08-05 187 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).* 
相關問題