최소한의 매칭 유틸리티입니다.
이는 npm이 내부적으로 사용하는 일치 라이브러리입니다.
glob 표현식을 JavaScript RegExp
객체로 변환하여 작동합니다.
// 하이브리드 모듈, 'minimatch'에서 require() 또는 importimport { minimatch }로 로드// 또는:const { minimatch } = require('minimatch')minimatch('bar.foo', '*.foo') // true!minimatch('bar.foo', '*.bar') // false!minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, 그리고 시끄러운!
다음과 같은 글로벌 기능을 지원합니다.
버팀대 확장
확장된 글로브 매칭
"Globstar" **
일치
[[:alpha:]]
와 같은 Posix 문자 클래스는 전체 범위의 유니코드 문자를 지원합니다. 예를 들어, [[:alpha:]]
'é'
와 일치하지만 [a-zA-Z]
일치하지 않습니다. 조합 기호 및 집합 일치는 지원되지 않으므로 [[=e=]]
'é'
와 일치 하지 않으며 [[.ch.]]
ch
단일 문자로 간주되는 로케일에서 'ch'
와 일치하지 않습니다.
보다:
man sh
man bash
패턴 매칭
man 3 fnmatch
man 5 gitignore
glob 표현식에는 슬래시만 사용하세요.
Windows에서는 /
또는 경로 구분 기호를 사용하지만 이 glob 구현에서는 /
문자만 사용됩니다. glob 표현식 에서만 슬래시를 사용해야 합니다. 패턴의 백슬래시는 항상 경로 구분 기호가 아닌 이스케이프 문자로 해석됩니다.
또는 /
Windows의 경로에서 경로 구분 기호로 해석 되며 glob 표현식의 /
와 일치합니다.
따라서 패턴에는 항상 /
사용하세요.
Windows에서는 //?/c:/...
또는 //ComputerName/Share/...
와 같은 UNC 경로가 특별히 처리됩니다.
이중 슬래시로 시작하고 슬래시가 아닌 일부 문자가 이어지는 패턴은 이중 슬래시를 유지합니다. 결과적으로 //*
와 같은 패턴은 //x
와 일치하지만 /x
와는 일치하지 않습니다.
//?/<drive letter>:
로 시작하는 패턴은 ?
를 처리하지 않습니다 . 와일드카드 문자로. 대신 일반 문자열로 처리됩니다.
//?/<drive letter>:/...
로 시작하는 패턴은 <drive letter>:/...
로 시작하는 파일 경로와 일치하며, 그 반대의 경우도 마찬가지입니다. 마치 //?/
가 없는 것처럼 말입니다. 이 동작은 드라이브 문자가 서로 대소문자를 구분하지 않는 경우에만 나타납니다. nocase:true
설정되지 않은 경우 경로/패턴의 나머지 부분은 대소문자를 구분하여 비교됩니다.
문자를 경로 구분 기호로 사용하여 UNC 경로를 지정하는 것은 파일 경로 인수에서 항상 허용되지만 옵션에 windowsPathsNoEscape: true
설정된 경우 패턴 인수에서만 허용됩니다.
minimatch.Minimatch
클래스를 인스턴스화하여 미니매치 개체를 만듭니다.
var Minimatch = require('minimatch').Minimatchvar mm = new Minimatch(패턴, 옵션)
pattern
미니매치 객체가 나타내는 원래 패턴입니다.
options
생성자에 제공되는 옵션입니다.
정규식 또는 문자열 표현식의 2차원 배열을 set
. 배열의 각 행은 중괄호 확장 패턴에 해당합니다. 행의 각 항목은 단일 경로 부분에 해당합니다. 예를 들어, {a,b/c}/d
패턴은 다음과 같은 패턴 세트로 확장됩니다.
[ [ a, d ] , [ b, c, d ] ]
패턴의 일부에 "마법"이 없으면(즉, fo*o?
가 아닌 "foo"
와 같은 것임) 정규 표현식으로 변환되지 않고 문자열로 남게 됩니다.
regexp
makeRe
메소드에 의해 생성됩니다. 전체 패턴을 표현하는 단일 정규식입니다. 이는 FNM_PATH
가 활성화된 fnmatch(3)
와 같은 패턴을 사용하려는 경우에 유용합니다.
패턴이 부정되면 True negate
.
comment
패턴이 주석이면 참입니다.
empty
패턴이 ""
이면 참입니다.
makeRe()
필요한 경우 regexp
멤버를 생성하고 반환합니다. 패턴이 유효하지 않으면 false
반환합니다.
match(fname)
파일 이름이 패턴과 일치하면 true를 반환하고 그렇지 않으면 false를 반환합니다.
matchOne(fileArray, patternArray, partial)
/
-split 파일 이름을 가져와서 regExpSet
의 단일 행과 일치시킵니다. 이 방법은 주로 내부용이지만 과도한 파일 시스템 호출을 피해야 하는 glob-walker에서 사용할 수 있도록 노출되어 있습니다.
hasMagic()
구문 분석된 패턴에 마법 문자가 포함되어 있으면 true를 반환합니다. 모든 비교기 부분이 문자열 리터럴인 경우 false를 반환합니다. magicalBraces
옵션이 생성자에 설정되면 마법이 아닌 중괄호 확장을 마법으로 간주합니다. 설정하지 않으면 a{b,c}d
와 같은 패턴은 false
반환합니다. 왜냐하면 abd
나 acd
모두 특수 glob 문자를 포함하지 않기 때문입니다.
이는 패턴 문자열이 이스케이프된 매직 글로브 문자를 포함할 수 있으므로 리터럴 파일 이름으로 사용할 수 있다는 의미는 아닙니다 . 예를 들어, 패턴 *
또는 [*]
은 일치하는 부분이 리터럴 문자열 '*'
로 구문 분석되고 '*'
가 아닌 ' '*'
라는 이름의 경로와 일치하므로 마법이 있는 것으로 간주되지 않습니다 '[*]'
. minimatch.unescape()
메서드를 사용하여 이스케이프 문자를 제거할 수 있습니다.
다른 모든 메서드는 내부적이며 필요에 따라 호출됩니다.
주요 수출. 옵션을 사용하여 패턴에 대해 경로를 테스트합니다.
var isJS = minimatch(file, '*.js', { matchBase: true })
Array.filter
와 함께 사용하기에 적합한 제공된 인수를 테스트하는 함수를 반환합니다. 예:
var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true }))
리터럴 문자열에만 일치하도록 glob 패턴의 모든 마법 문자를 이스케이프합니다.
windowsPathsNoEscape
옵션을 사용하는 경우 문자는 []
로 래핑하여 이스케이프됩니다. 문자 클래스에 래핑된 마법 문자는 정확한 해당 문자로만 충족될 수 있기 때문입니다.
슬래시(및 windowsPathsNoEscape
모드의 백슬래시)는 이스케이프하거나 이스케이프 취소할 수 없습니다.
일부 이스케이프된 문자가 포함될 수 있는 glob 문자열을 이스케이프 해제합니다.
windowsPathsNoEscape
옵션을 사용하면 대괄호 이스케이프가 제거되지만 백슬래시 이스케이프는 제거되지 않습니다. 예를 들어 문자열 '[*]'
*
로 변환하지만 '*'
'*'
로 변환하지는 않습니다. 왜냐하면 은 windowsPathsNoEscape
모드의 경로 구분 기호이기 때문입니다.
windowsPathsNoEscape
설정되지 않으면 중괄호 이스케이프와 백슬래시 이스케이프가 모두 제거됩니다.
슬래시(및 windowsPathsNoEscape
모드의 백슬래시)는 이스케이프하거나 이스케이프 취소할 수 없습니다.
fnmatch 또는 glob 스타일로 파일 목록과 일치합니다. 일치하는 항목이 없고 options.nonull이 설정된 경우 패턴 자체가 포함된 목록을 반환합니다.
var javascripts = minimatch.match(fileList, '*.js', { matchBase: true })
패턴에서 정규식 개체를 만듭니다.
모든 옵션은 기본적으로 false
입니다.
stderr에 수많은 내용을 덤프합니다.
{a,b}
및 {1..3}
중괄호 세트를 확장하지 마세요.
여러 폴더 이름에 대해 **
일치를 비활성화합니다.
패턴에 마침표가 명시적으로 포함되어 있지 않더라도 패턴이 마침표로 시작하는 파일 이름과 일치하도록 허용합니다.
dot
설정되지 않으면 기본적으로 a/**/b
a/.d/b
와 일치 하지 않습니다 .
+(a|b)
와 같은 "extglob" 스타일 패턴을 비활성화합니다.
대소문자를 구분하지 않고 일치를 수행합니다.
{nocase: true}
와 함께 사용하면 대소문자를 구분하지 않는 정규식을 생성하지만 문자열 일치 부분은 그대로 둡니다. {nocase: true}
없이 사용하면 효과가 없습니다.
대소문자를 구분하지 않는 다른 형태의 일치가 사용되거나 원래 문자열 표현이 다른 방식으로 유용한 경우에 유용합니다.
minimatch.match
로 일치하는 항목을 찾지 못한 경우, 이 옵션이 설정된 경우 패턴 자체가 포함된 목록을 반환합니다. 설정하지 않은 경우 일치하는 항목이 없으면 빈 목록이 반환됩니다.
이는 Minimatch.hasMagic
메소드의 결과에만 영향을 미칩니다.
패턴에 a{b,c}d
와 같은 중괄호 확장이 포함되어 있지만 다른 마법 문자가 없는 경우 Minimatch.hasMagic()
메서드는 기본적으로 false
반환합니다. 이 옵션을 설정하면 중괄호 확장 및 기타 매직 글로브 문자에 대해 true
반환합니다.
설정된 경우, 슬래시가 포함된 경우 슬래시가 없는 패턴이 경로의 기본 이름과 일치됩니다. 예를 들어, a?b
/xyz/123/acb
경로와 일치하지만 /xyz/acb/123
경로와 일치하지 않습니다.
패턴 시작 부분의 #
주석으로 처리하는 동작을 억제합니다.
선도를 대하는 행동을 억제하라 !
부정으로서의 성격.
부정되지 않은 것처럼 부정 표현식에서 반환됩니다. (즉, 적중 시에는 true이고, 실패 시에는 false입니다.)
부분 경로를 패턴과 비교합니다. 존재하는 경로 부분이 패턴과 모순되지 않는 한 일치하는 것으로 간주됩니다. 이는 폴더 구조를 탐색하고 아직 전체 경로가 없지만 일치할 수 없는 경로를 따르지 않도록 하려는 애플리케이션에 유용합니다.
예를 들어,
minimatch('/a/b', '/a/*/c/d', { 부분: true }) // true, /a/b/c/dminimatch('/a/b', '/일 수 있음 **/d', { 부분: true }) // true, /a/b/.../dminimatch('/x/y/z', '/a/**/z', { 부분적일 수 있음) : true }) // false, 왜냐하면 x !== a이기 때문입니다.
경로 구분 기호 로만 사용하고 이스케이프 문자로 사용 하지 마십시오 . 설정된 경우 모든
문자는 패턴에서
/
로 대체됩니다. 이로 인해 리터럴 glob 패턴 문자가 포함된 경로와 일치하는 것이 불가능 하지만 Windows 플랫폼에서 path.join()
및 path.resolve()
를 사용하여 구성된 패턴과 일치할 수 있으며 Windows에서 이전 버전의 (버그가 있는!) 동작을 모방할 수 있습니다. . 주의해서 사용하고 Windows 경로에 대한 주의 사항에 유의하세요.
레거시 이유로 인해 options.allowWindowsEscape
정확한 값 false
로 설정된 경우에도 설정됩니다.
패턴이 UNC 경로 또는 드라이브 문자로 시작하고 nocase:true
모드에서 패턴의 루트 부분을 대소문자를 구분하지 않는 정규 표현식으로 변환하지 말고 대신 문자열로 남겨두세요.
플랫폼이 win32
이고 nocase:true
설정된 경우 이는 기본값입니다.
기본적으로 여러 /
문자(UNC 경로의 선행 //
제외, 위의 "UNC 경로" 참조)는 단일 /
로 처리됩니다.
즉, a///b
와 같은 패턴은 파일 경로 a/b
와 일치합니다.
이 동작을 억제하려면 preserveMultipleSlashes: true
설정하십시오.
패턴을 구문 분석하고 일치 항목에 사용하기 전에 패턴에 대해 수행해야 하는 최적화 수준을 나타내는 숫자입니다.
Globstar 부분 **
은 noglobstar
설정된 경우 항상 *
로 변환되고, 인접한 여러 **
부분은 단일 **
로 변환됩니다(즉, a/**/**/b
a/**/b
로 처리됩니다. 이는 모든 경우에 동일하기 때문입니다).
0
- 더 이상 변경하지 않습니다. 이 모드에서는 .
및 ..
패턴에서 유지됩니다. 즉, 테스트 경로 문자열의 동일한 위치에도 나타나야 합니다. 예를 들어, a/*/../c
와 같은 패턴은 문자열 a/b/../c
와 일치하지만 문자열 a/c
와는 일치하지 않습니다.
1
- (기본값) **
, 가 아닌 패턴 부분 뒤에 이중 점 .
이 있는 경우를 제거합니다 ..
, ..
또는 비어 있습니다 ''
. 예를 들어, ./a/b/../*
패턴은 ./a/*
로 변환되므로 경로 문자열 ./a/c
와 일치하지만 경로 문자열 ./a/b/../c
. 패턴의 점과 빈 패스 부분은 유지됩니다.
2
(또는 그 이상) - 파일 탐색 사례에 사용하기에 적합한 훨씬 더 공격적인 최적화:
이러한 최적화는 glob(즉, 이 모듈이 존재하는 이유)과 같은 파일 탐색 사용 사례의 성능을 향상시키지만, 최적화 수준 1 또는 0에서 일치했던 리터럴 문자열과 일치하지 못하는 경우가 있습니다.
특히 Minimatch.match()
메서드는 동일한 방식으로 파일 경로 문자열을 최적화하여 동일한 일치 결과를 생성하지만 경로 문자열이 첫 번째가 아니면 Minimatch.makeRe()
에서 제공하는 정규식으로 테스트할 때 실패합니다. minimatch.levelTwoFileOptimize()
또는 이와 유사한 방법으로 처리됩니다.
**
, 가 아닌 패턴 부분 뒤에 이중 점 .
이 나타나는 경우를 제거하세요 ..
, 또는 비어 있습니다 ''
. 빈 및 을 제거합니다 .
안전하게 수행할 수 있는 패턴 부분(예: /
로 시작하는 패턴의 마지막 위치, 첫 번째 위치 또는 두 번째 위치가 아닌 다른 위치, 이는 Windows에서 UNC 경로를 나타낼 수 있음)
<pre>/**/../<p>/<rest>
를 포함하는 패턴을 동등한 <pre>/{..,**}/<p>/<rest>
로 변환합니다. 여기서 <p>
는 패턴입니다. 이외의 부분 .
, ..
, **
또는 비어 있음 ''
.
**
부분이 하나에는 있고 다른 부분에는 생략되어 있으며 최종 경로 부분이 아니고 그 외에는 동일한 중복 제거 패턴입니다. 따라서 **
빈 경로 부분과 일치하므로 {a/**/b,a/b}
는 a/**/b
가 됩니다.
*
부분이 1개 존재하는 Dedupe 패턴과 **
이외의 점이 아닌 패턴, .
, ..
또는 ''
다른 쪽에서도 같은 위치에 있습니다. 따라서 a/{*,x}/b
a/*/b
가 됩니다. 왜냐하면 *
x
와 일치할 수 있기 때문입니다.
win32
로 설정하면 모든 Windows 관련 동작(UNC 경로에 대한 특수 처리 및 비교를 위한 파일 경로의 구분 기호로 처리)이 트리거됩니다.
기본값은 process.platform
값입니다.
기존 표준을 엄격하게 준수하는 것은 가치 있는 목표이지만 미니매치와 다른 구현 간에는 일부 불일치가 존재합니다. 일부는 의도적인 것이고, 일부는 불가피한 것입니다.
패턴이 !
로 시작하는 경우 문자이면 무효화됩니다. 이 동작을 억제하려면 nonegate
플래그를 설정하고 선행 !
일반적으로 문자. !(a|B)
와 같은 음의 extglob 패턴으로 패턴을 시작하려는 경우 이는 아마도 관련이 있을 것입니다. 다수의 !
패턴 시작 부분의 문자는 패턴을 여러 번 무효화합니다.
패턴이 #
으로 시작하면 주석으로 처리되며 어떤 것과도 일치하지 않습니다. #
사용하여 줄 시작 부분의 리터럴 #
일치시키거나, 이 동작을 억제하려면 nocomment
플래그를 설정하십시오.
noglobstar
플래그가 설정되지 않은 한 이중 별 문자 **
는 기본적으로 지원됩니다. 이는 bsdglob 및 bash 4.1의 방식으로 지원됩니다. 여기서 **
경로 부분에서 유일한 것일 경우에만 특별한 의미를 갖습니다. 즉, a/**/b
a/x/y/b
와 일치하지만 a/**b
일치하지 않습니다.
이스케이프된 패턴에 일치하는 항목이 없고 nonull
플래그가 설정된 경우 minimatch.match는 문자 이스케이프를 해석하는 대신 제공된 패턴을 반환합니다. 예를 들어, minimatch.match([], "*a?")
"*a?"
반환합니다. "*a?"
대신 . 이는 이스케이프된 패턴 문자를 확인하지 않는다는 점을 제외하면 bash에서 nullglob
옵션을 설정하는 것과 유사합니다.
중괄호 확장이 비활성화되지 않은 경우 glob 패턴의 다른 해석보다 먼저 수행됩니다. 따라서 bash 또는 zsh에서 유효하지 않은 +(a|{b),c)}
와 같은 패턴은 먼저 +(a|b)
및 +(a|c)
세트로 확장됩니다. 패턴의 유효성이 검사됩니다. 이 두 개가 유효하므로 매칭이 진행됩니다.
부정 extglob 패턴은 Bash 의미 체계에 최대한 가깝게 처리되지만, JavaScript 정규식으로 표현하기 매우 어려운 부정 extglob이 있는 경우도 있습니다. 특히 부정 패턴 <start>!(<pattern>*|)*
bash에서 <start><pattern>
으로 시작하지 않는 모든 항목과 일치합니다. 그러나 <start>!(<pattern>*)*
<start><pattern>
으로 시작하는 경로와 일치 합니다 . 왜냐하면 빈 문자열이 부정된 부분과 일치할 수 있기 때문입니다. 이 라이브러리에서 <start>!(<pattern>*|)*
<start>
로 시작하는 어떤 패턴과도 일치하지 않습니다 . 정규 표현식과 bash 경로 확장에서 "탐욕"으로 간주되는 패턴이 정확히 다르기 때문입니다. 이는 고칠 수 있지만 약간의 복잡성과 성능 비용이 발생하지 않고는 불가능하며 절충안을 추구할 가치가 없는 것 같습니다.
libc의 fnmatch(3)
는 슬래시에 대해 특별한 작업을 수행하지 않는 매우 순진한 문자열 비교 일치자입니다. 이 라이브러리는 glob 검색 및 파일 워커에 사용되도록 설계되었으므로 /
사용하여 특별한 작업을 수행합니다. 따라서 foo*
fnmatch(3)
에서는 일치하더라도 이 라이브러리에서는 foo/bar
일치하지 않습니다.