• ..

Postgresql

    node-glob のパターンの書き方

    以下のようなファイル構造だとします。

    .
    ├── ba
    │   └── z.mdx
    ├── bar
    │   └── b.mdx
    ├── baz
    │   └── c.mdx
    └── foo
        └── a.mdx
    
    3 directories, 3 files

    0か複数

    *を使うと0か複数を表せます。

    glob('ba*/**/*.mdx', (_, files) => {
      console.log(files);
    });

    これは[ 'ba/z.mdx', 'bar/b.mdx', 'baz/c.mdx' ]を得ます。*の部分は無いものでもマッチするのでbaも含まれます。

    1か複数

    ?を使うと1か複数を表せます。

    glob('ba?/**/*.mdx', (_, files) => {
      console.log(files);
    });

    これは[ 'bar/b.mdx', 'baz/c.mdx' ]を得ます。?は必ず何かしらの文字列がある必要があるので今度はbaは含まれません。

    範囲

    []で囲むと範囲という意味になります。例えば[a-z]a,b,c,d,...みたいな意味になります。

    glob('qqqq/ba[a-z]/**/*.mdx', (_, files) => {
      console.log(files);
    });

    よってこれも[ 'bar/b.mdx', 'baz/c.mdx' ]を得ます。

    完全マッチの複数

    @(foo|b?r)と書くとfoob?rの時にマッチします。中で?*など使えるので柔軟に複数指定できます。

    glob('qqqq/@(foo|bar)/**/*.mdx', (_, files) => {
      console.log(files);
    });

    これは[ 'foo/a.mdx', 'bar/b.mdx' ]を得ます。

    複数マッチの否定

    !(foo|bar)と書くとfoobarじゃないものにマッチします。

    glob('qqqq/!(foo|bar)/**/*.mdx', (_, files) => {
      console.log(files);
    });

    これは[ 'qqqq/baz/c.mdx' ]を得ます。

    何でもいいディレクトリ

    **を使うとディレクトリの名前・どこにあるかに関係なくマッチするようにできます。

    glob('**/*.mdx', (_, files) => {
      console.log(files);
    });

    これは[ 'foo/a.mdx', 'bar/b.mdx', 'baz/c.mdx' ]を得ます。これはhoge/fuga/piyo/a.mdxというようなファイルであってもマッチします。