2016-08-05 2 views
1

node_modules 폴더 내의 폴더를 제외한 모든 */bin/*을 무시하려고합니다. 그래서 :어떻게 Mercurial에서 node_modules 안의 것들을 제외한 모든 bin 폴더를 무시합니까?

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

glob 패턴이 처리되지 않으므로 올바른 정규식을 찾으려고합니다.

내가 해낸 :

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

하지만 뭔가 아직도 그 잘못이다. 나는 모든 포함 된 문자열/빈/일치 할,하지만 node_modules이되지 않을 경우 어딘가 전/빈/

당신이 당신의 정규식의 시작에 당신의 부정적인 lookbehind (?<!..)을 둘 필요가
+0

"무시하지"정규식 일치하지 않아야 의미를 참조하십시오? '^ (?!. * \ node_modules \ /). * \/bin \ /.*'을 입력하십시오. –

답변

1

대부분의 아마 당신이 무한 너비는 것을 lookbehind 사용할 수 없습니다 논리를 사용한다면 여기에 필요합니다.

내가 시작 부분에 내다을 사용하는 것이 좋습니다 : \와 다음에 마지막 /node_modules까지 가능한 한 많은 개행 문자 이외의 문자가 0 개 이상있을 경우

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

룩어 검사를 한 다음 마지막으로 가능한 한 많이 개행 문자가 아닌 0 개 이상의 문자가 추가 /bin/ (참고 : \/(?:$|\/)으로 바꿔서 문자열 끝에 /을 확인할 수 있습니다. /bin/ 앞에 /node_modules/이 있으면이 미리보기가 기본적으로 일치하지 않습니다.

.*\/bin\/.*/bin/을 포함하는 행과 일치합니다.

이 (가) regex demo

+0

음부를 앞두고 시작하기 전에 *.를 추가해야한다고 생각합니다. –

+0

와우! 이것은 실제로 효과가있다! 처음에 (? i)를 추가하여 대소 문자를 무시합니다. – Eiver

+0

예, 인라인'(? i)'수정자는 대소 문자를 구분하지 않습니다. –

0

부정적인 lookbehind : 보장 주어진 패턴이 일치하지 않고 표현식의 현재 위치에서 끝난다. 문자를 소비하지 않습니다. /(?<!not)foo/

이 일치하지 : not foo

이 경기를 : but foo

이런 식으로 뭔가를 시도 :

(?<!node_modules).*?(?<!node_modules)\/bin\/(?<!node_modules).* 
관련 문제