2016-08-05 15 views
1

node_modulesフォルダ内のフォルダ以外のすべての*/bin/*を無視しようとしています。だから:Mercurialのnode_modules内のbinフォルダ以外のすべてのbinフォルダを無視するには?

globパターンはそれを処理しないので、私は正しい正規表現を考え出しています。

私が思い付いた:

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

しかし、何かはまだその中に間違っています。 あなたが正規表現の先頭

否定後読みであなたの否定後読み(?<!..)を配置する必要があり、どこかの前に/ binに/

+0

は「無視されない」正規表現の一致があってはならない意味?を参照してください。 '^(?!。* \/node_modules \ /)。* \/bin \ /.*'を試してください。 –

答えて

1

but foo

はこのような何かを試してみてくださいロジックを使用する場合は、ここに必要です。

私が先頭に先読みを使用することをお勧め:\に続いて、最後/node_modulesまで、できるだけ多くの改行以外の文字が0+がある場合

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

先読みチェックをした後、可能な限り改行以外の0以上の文字を最後の/bin/(注:最後の\/(?:$|\/)に置き換えて、文字列の最後に/を確認してください)。 /bin/の前に/node_modules/がある場合、この先読みは基本的に一致しません。

.*\/bin\/.*は、/bin/を含む行と一致します。

regex demo

+0

ネガティブルックアヘッドを開始する前に*を追加する必要があると思います。 –

+0

うわー!これは実際に働いた!最初に(?i)を追加して、大文字小文字を無視します。 – Eiver

+0

はい、インライン '(?i)'修飾子は、大文字と小文字を区別しない検索を有効にします。 –

0

node_modulesがある場合、私はないの/ bin /を含む任意の文字列にマッチしたいのですが、:保証します与えられたパターンが一致しておらず、式の現在の位置で終了することを示します。文字を消費しません。

/(?<!not)foo/

でこれが一致しません:not foo

この試合を:おそらくあなたは無限の幅の後読みを使用することはできません

(?<!node_modules).*?(?<!node_modules)\/bin\/(?<!node_modules).* 
関連する問題