如何在 Mercurial 中忽略除 node_modules 内的所有 bin 文件夹?
How to ignore all bin folders except ones inside node_modules in Mercurial?
我试图忽略解决方案中的所有 * /bin/*,node_modules 文件夹中的文件夹除外。所以:
/something/file.txt <- not ignored
/something/bin/file.txt <- ignored
/something/node_modules/anything/bin/file.txt <-not ignored
glob patter 无法处理该问题,因此我正在尝试提出正确的正则表达式。
我想到了:
.*?\/bin\/(?<!node_modules).*
但还是有不对的地方。
我想匹配任何包含 /bin/ 的字符串,但如果 /bin/
之前的某处有 node_modules 则不匹配
您需要在正则表达式
的开头放置您的负面回顾 (?<!..)
negative lookbehind : 确保给定的模式不会匹配并在表达式中的当前位置结束。不消耗字符。
和/(?<!not )foo/
这不匹配:not foo
这场比赛:but foo
尝试这样的事情:
(?<!node_modules).*?(?<!node_modules)\/bin\/(?<!node_modules).*
如果您使用自己的逻辑,很可能您无法在此处使用所需的无限宽度后视。
我建议在开始时使用前瞻:
^(?!.*\/node_modules(?=\/).*\/bin\/).*\/bin\/.*
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
先行检查是否有除换行符以外的 0+ 个字符,直到最后一个 /node_modules
后跟 \
,然后再检查除换行符之外的 0+ 个字符换行尽可能多到最后一个 /bin/
(注意:最后一个 \/
可以替换为 (?:$|\/)
以检查字符串末尾的 /
)。如果在 /bin/
.
之前有 /node_modules/
,则此前瞻基本上无法匹配
.*\/bin\/.*
匹配包含 /bin/
.
的行
我试图忽略解决方案中的所有 * /bin/*,node_modules 文件夹中的文件夹除外。所以:
/something/file.txt <- not ignored
/something/bin/file.txt <- ignored
/something/node_modules/anything/bin/file.txt <-not ignored
glob patter 无法处理该问题,因此我正在尝试提出正确的正则表达式。
我想到了:
.*?\/bin\/(?<!node_modules).*
但还是有不对的地方。 我想匹配任何包含 /bin/ 的字符串,但如果 /bin/
之前的某处有 node_modules 则不匹配您需要在正则表达式
的开头放置您的负面回顾(?<!..)
negative lookbehind : 确保给定的模式不会匹配并在表达式中的当前位置结束。不消耗字符。
和/(?<!not )foo/
这不匹配:not foo
这场比赛:but foo
尝试这样的事情:
(?<!node_modules).*?(?<!node_modules)\/bin\/(?<!node_modules).*
如果您使用自己的逻辑,很可能您无法在此处使用所需的无限宽度后视。
我建议在开始时使用前瞻:
^(?!.*\/node_modules(?=\/).*\/bin\/).*\/bin\/.*
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
先行检查是否有除换行符以外的 0+ 个字符,直到最后一个 /node_modules
后跟 \
,然后再检查除换行符之外的 0+ 个字符换行尽可能多到最后一个 /bin/
(注意:最后一个 \/
可以替换为 (?:$|\/)
以检查字符串末尾的 /
)。如果在 /bin/
.
/node_modules/
,则此前瞻基本上无法匹配
.*\/bin\/.*
匹配包含 /bin/
.