我试图忽略解决方案中的所有* / 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则不会答案 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).*