Jaki jest znak ** glob?


87

Mam tę ścieżkę w moim pliku reagowania:

var path = {
  HTML: 'src/index.html',
  ALL: ['src/js/*.js', 'src/js/**/*.js', 'src/index.html'],
  JS: ['src/js/*.js', 'src/js/**/*.js'],
  MINIFIED_OUT: 'build.min.js',
  DEST_SRC: 'dist/src',
  DEST_BUILD: 'dist/build',
  DEST: 'dist'
};

Jaki jest znak podwójnej globu?

Wiem, co to jest pojedyncza kulka ... ale co to jest podwójna? pojedynczy glob

Odpowiedzi:


101

Jest prawie taki sam jak pojedyncza gwiazdka, ale może składać się z wielu poziomów katalogu.

Innymi słowy, while /x/*/ydopasuje wpisy takie jak:

/x/a/y
/x/b/y

i tak dalej (z tylko jednym poziomem katalogu w sekcji symboli wieloznacznych), podwójna gwiazdka /x/**/ybędzie również pasować do takich rzeczy, jak:

/x/any/number/of/levels/y

z pojęciem „dowolnej liczby poziomów”, w tym również zero (innymi słowy, /x/**/ybędzie pasować /x/yjako jedna z opcji).


Na marginesie, chociaż nienawidzę przypisywać mainframe'owi czegokolwiek, uważam, że było to używane od czasów MVS, aby umożliwić wybór zestawów danych na wielu poziomach :-)


2
To nie ma sensu. Jeśli * oznacza 0 lub więcej znaków, to ten wzorzec może potencjalnie pasować do / x // y, co jest bezsensowne. To, co tak naprawdę mówisz, to „dowolna liczba znaków, po której następuje dowolna liczba znaków”. Czy to nie tylko ... och, nie wiem ... jakąkolwiek liczbę znaków ???
— AleksandrH

7
@AleksandrH, nie, to nie jest wyrażenie regularne w normalnym sensie: nie ma dopasowywania znaków, tylko nazwy katalogów. Dotyczy to szczególnie hierarchicznych systemów plików. Po pierwsze, gdyby dozwolone były puste nazwy katalogów, /x//ybyłoby to całkowicie poprawne. Jednak nigdy nie widziałem systemu plików, który na to pozwala. W drugim punkcie, *środki pasują do „dowolnej nazwy katalogu, tylko jednego poziomu” (więc nie wykraczają poza następny /separator), natomiast **oznaczają „dopasuj dowolną liczbę poziomów z dowolną nazwą katalogu na każdym poziomie” (może przekroczyć tyle /przekładki w razie potrzeby).
— paxdiablo

9
Warto zauważyć, że w przypadku /x/**/y/, /x/y/jest również, co jest miłe.
— Yassine Imounachen

24

Zwykle jest używany do wskazania dowolnej liczby podkatalogów. Więc

src/js/**/*.js

Pasowałby

src/js/files/*.js
src/js/more-files/*.js

etc
etc

8
Pojedyncza gwiazdka również pasowałaby do Twoich przykładów. Myślę, że chciałeś dołączyć dodatkowy podkatalog do drugiego przykładu.
— Simon East

1
@SimonEast jak to? src / js / files / controllers / user.js, src / js / files / models / foo / var.js
— AutumnSky

21

**dopasowuje dowolny znak, w tym ukośnik, /
*pasuje do dowolnego znaku z wyjątkiem ukośnika (aby dopasować tylko nazwę pliku lub katalogu)


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.