最小限のマッチングユーティリティ。
これは、npm によって内部的に使用される一致するライブラリです。
これは、glob 式を JavaScript RegExp
オブジェクトに変換することで機能します。
// ハイブリッド モジュール、require() でロードするか、 importimport { minimatch } from 'minimatch'// or:const { minimatch } = require('minimatch')minimatch('bar.foo', '*.foo') // true!minimatch('bar.foo', '*.bar') // false!minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // 本当ですが、うるさいです!
次のグロブ機能をサポートします。
ブレースの拡張
拡張グロブマッチング
「グロブスター」 **
一致
Unicode 文字の全範囲をサポートする Posix 文字クラス ( [[:alpha:]]
など)。たとえば、 [[:alpha:]]
'é'
と一致しますが、 [a-zA-Z]
一致しません。シンボルの照合とセットのマッチングはサポートされていないため、 ch
が 1 文字とみなされているロケールでは、 [[=e=]]
'é'
に一致せず、 [[.ch.]]
'ch'
に一致しません。
見る:
man sh
man bash
パターンマッチング
man 3 fnmatch
man 5 gitignore
グロブ式ではスラッシュのみを使用してください。
Windows ではパス区切り文字として/
またはいずれかを使用しますが、この glob 実装では/
文字のみが使用されます。スラッシュはグロブ式でのみ使用する必要があります。パターン内のバックスラッシュは、パス区切り文字ではなく、常にエスケープ文字として解釈されます。
or /
Windows 上のパスのパス区切り文字として解釈され、glob 式の/
と一致することに注意してください。
したがって、パターンでは常に/
使用してください。
Windows では、 //?/c:/...
や//ComputerName/Share/...
のような UNC パスは特別に処理されます。
ダブルスラッシュで始まり、その後にスラッシュ以外の文字が続くパターンでは、ダブルスラッシュが保持されます。その結果、 //*
のようなパターンは//x
には一致しますが、 /x
は一致しません。
//?/<drive letter>:
? は処理されません?
ワイルドカード文字として。代わりに、通常の文字列として扱われます。
//?/<drive letter>:/...
で始まるパターンは、 //?/
が存在しないかのように、 <drive letter>:/...
で始まるファイル パスと一致します。また、その逆も同様です。この動作は、ドライブ文字が大文字と小文字を区別せずに互いに一致する場合にのみ発生します。 nocase:true
が設定されていない限り、パス/パターンの残りの部分は大文字と小文字が区別されて比較されます。
パス区切り文字として文字を使用した UNC パスの指定は、ファイル パス引数では常に許可されますが、オプションでwindowsPathsNoEscape: true
が設定されている場合にパターン引数でのみ許可されることに注意してください。
minimatch.Minimatch
クラスをインスタンス化して、minimatch オブジェクトを作成します。
var Minimatch = require('minimatch').Minimatchvar mm = 新しい Minimatch(パターン, オプション)
pattern
minimatch オブジェクトが表す元のパターン。
options
コンストラクターに提供されるオプション。
set
正規表現または文字列式の 2 次元配列。配列内の各行は、中括弧で展開されたパターンに対応します。行内の各項目は、単一のパス部分に対応します。たとえば、パターン{a,b/c}/d
は、次のようなパターンのセットに拡張されます。
[ [ a, d ] , [ b, c, d ] ]
パターンの一部に「magic」が含まれていない場合 (つまり、 fo*o?
ではなく"foo"
のようなもの)、正規表現に変換されず、文字列として残されます。
regexp
makeRe
メソッドによって作成されます。パターン全体を表す単一の正規表現。これは、 FNM_PATH
を有効にしてfnmatch(3)
のようなパターンを使用する場合に便利です。
negate
パターンが否定される場合は True。
comment
パターンがコメントの場合は True。
empty
パターンが""
の場合は True。
makeRe()
必要に応じてregexp
メンバーを生成し、それを返します。パターンが無効な場合はfalse
を返します。
match(fname)
ファイル名がパターンと一致する場合は true を返し、そうでない場合は false を返します。
matchOne(fileArray, patternArray, partial)
/
-split ファイル名を取得し、それをregExpSet
内の 1 つの行と照合します。このメソッドは主に内部使用ですが、過度のファイルシステム呼び出しを避ける必要がある glob-walker で使用できるように公開されています。
hasMagic()
解析されたパターンにマジック文字が含まれている場合は true を返します。すべてのコンパレータ部分が文字列リテラルの場合は false を返します。 magicalBraces
オプションがコンストラクターに設定されている場合、魔法ではない中括弧の展開が魔法であると見なされます。設定されていない場合、 abd
にもacd
も特殊な glob 文字が含まれていないため、 a{b,c}d
のようなパターンはfalse
返します。
これは、パターン文字列がエスケープされたマジック グロブ文字を含む可能性があるため、リテラルのファイル名として使用できるという意味ではありません。たとえば、パターン*
または[*]
、一致する部分がリテラル文字列'*'
に解析され、 '*'
や'[*]'
ではなく'*'
という名前のパスに一致するため、マジックがあるとはみなされません。 '[*]'
。 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
です。
大量のものを標準エラー出力にダンプします。
{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', {partial: 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 パス」を参照) は 1 つの/
として扱われます。
つまり、 a///b
のようなパターンは、ファイル パスa/b
と一致します。
この動作を抑制するには、 preserveMultipleSlashes: true
を設定します。
パターンを解析して一致に使用する前に、パターンに対して実行する必要がある最適化のレベルを示す数値。
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()
などで処理されます。
**
, .
ではないパターン部分の後に二重ドット..
が続くケースを削除します。 、または空の''
。空の と を削除します.
安全に実行できるパターンの一部 (つまり、 /
で始まるパターンの最後の位置、最初の位置、または 2 番目の位置以外の場所。これは Windows 上の UNC パスを示す可能性があるため)。
<pre>/**/../<p>/<rest>
を含むパターンを同等の<pre>/{..,**}/<p>/<rest>
に変換します。ここで、 <p>
はパターンです.
の部分も、 ..
、 **
、または空の''
。
**
部分が一方に存在し、他方では省略され、最終パス部分ではない重複排除パターン。その他の点では同等です。 **
空のパス部分と一致するため、 {a/**/b,a/b}
はa/**/b
になります。
*
部分が 1 つに存在するパターンと、 **
, 以外の非ドット パターンの重複排除パターン.
、 ..
、または''
、もう一方の同じ位置にあります。 *
x
と一致するため、 a/{*,x}/b
a/*/b
になります。
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
オプションの設定に似ています。
中括弧の展開が無効になっていない場合は、グロブ パターンの他の解釈の前に実行されます。したがって、 +(a|{b),c)}
のようなパターンは、 bash や zsh では無効ですが、最初に+(a|b)
と+(a|c)
のセットに展開されます。パターンの有効性がチェックされます。これら 2 つは有効なので、マッチングが続行されます。
否定された extglob パターンは、Bash セマンティクスにできる限り厳密に処理されますが、JavaScript 正規表現で表現するのが非常に難しい負の extglob の場合もあります。特に、否定されたパターン<start>!(<pattern>*|)*
は、 bash では<start><pattern>
で始まらないものと一致します。ただし、空の文字列は否定された部分と一致する可能性があるため、 <start>!(<pattern>*)*
<start><pattern>
で始まるパスと一致します。このライブラリでは、 <start>!(<pattern>*|)*
、 <start>
で始まるどのパターンとも一致しません。 これは、正規表現と bash のパス展開でどのパターンが「貪欲」であるとみなされるかが正確に異なるためです。これは修正可能かもしれませんが、ある程度の複雑さとパフォーマンスのコストが発生する可能性があり、トレードオフを追求する価値はないようです。
libc のfnmatch(3)
は非常に単純な文字列比較マッチャーであり、スラッシュに対して特別なことは何も行わないことに注意してください。このライブラリは、グロブ検索とファイル ウォーカーで使用されるように設計されているため、 /
使用して特別な処理を実行します。したがって、 foo*
fnmatch(3)
では一致するとしても、このライブラリではfoo/bar
と一致しません。