1. 소개
매턴 매칭 문법이다. 정규표현식을 떠올리면 쉽다.
다만 정규표현식은 다양한 용도에서 범용적으로 사용할 수 있지만, Globs는 주로 파일 시스템 검색 용도로 사용한다.
또한 둘 사이에 적용되는 문법도 약간 차이가 있다.
2. 기호
2.1. ?
정확히 한 글자와 매칭된다. (정규표현식에서 가장 비슷한 역할은 . 기호이다)
예를 들어 a? 라면 aa, ab, ac, ad 등등의 문자열과 매칭된다.
이때 ?는 한 글자와 매칭되기 때문에 a?는 abb acc add와는 매칭되지 않는다.
연속으로도 사용할 수 있다.
예를 들어 e?? 라면 egg, ear, era, ego, end 등등이 매칭된다.
결과적으로 다음과 같다.
# 패턴
src/e??.txt
# 매칭되는 경우
src/egg.txt, src/ear.txt, src/era.txt, src/end.txt
# 매칭되지 않는 경우
src/element.txt, src/erase.txt, src/eternal.txt
2.2. *
길이와 상관없이 모든 문자와 매칭된다. (공백 포함)
예를 들어 a*라면 a, aa, aaa, abc, abcd, abcde 등등의 문자열과 매칭된다.
여기서 눈여겨볼 점은 *는 문자가 오지 않을 수도 있다.
즉 a*는 a와도 매칭된다.
결과적으로 다음과 같다.
# 패턴
src/e*.jpg
# 매칭되는 경우
src/e.jpg, src/elephant.jpg, src/egg.jpg, src/equal.jpg
# 응용 사용법으로 확장자에도 glob을 적용할 수 있다
# 패턴
image.*
# 매칭되는 경우
image.jpg, image.png, image.gif, image.webp
2.3. **
디렉토리를 모두 탐색하고자 할 때 쓸 수 있는 기호이다.
예를 들어 src/**/index.js 라면, src 폴더 내부의 모든 곳에 위치한 index.js와 매칭된다.
즉 src/component/modal/index.js, src/index.js, src/page/index.js 등등이 매칭된다.
더 나아가 패턴이 **/*.js 라면, 모든 디렉토리에 있는 js파일을 찾을 수 있다.
# 패턴
**/*.ts
# 매칭되는 경우
/index.ts, /src/App.ts, src/components/Header/Header.ts
2.4. {}
선택지(이것들 중에 하나)를 부여하고자 할 때 쓸 수 있는 기호이다.
예를 들어 패턴이 *.{jpg, png} 일 경우, 파일 이름은 상관없이 확장자가 jpg이거나, png인 것과 매칭된다.
물론 *.jpg, *.png 이렇게 패턴을 두 번 사용할 수도 있지만, 짧고 간단하게 패턴을 표현하기 위해 중괄호를 사용한다.
# 패턴
*.{jpg,png}
# 매칭되는 경우
flower.jpg, cat.png, dog.jpg
2.5 []
{}와 역할은 비슷하지만, {}에는 문자열(string)이 선택될 수 있지만, []는 문자(char)만 선택될 수 있다.
예를 들어 파일명 중간에 영어 모음이 적어도 한 개는 포함되어야 할 경우 다음과 같이 나타낼 수 있다.
*[aeiou]*
정규표현식과 마찬가지로 []에는 -를 이용하여 범위를 지정할 수 있다.
예를 들어 A부터 Z까지의 대문자 중 한 개를 의미할 경우: [A-Z]
a부터 z까지의 소문자 중 한 개를 의미할 경우: [a-z]
0부터 9까지의 숫자 한 개를 의미할 경우: [0-9]
한글 문자 한 개를 의미할 경우: [가-힣]
이때 !기호를 맨 앞에 붙이면, 해당 패턴을 제외한 것을 의미한다.
예를 들어 [!A-Z]는 대문자가 포함되지 않음을 의미한다.
따라서 src/![A-Z]*.jpg의 경우에는 src 폴더에 위치한 대문자로 시작하지 않는 jpg 파일을 의미한다.
# 패턴 (소문자 두 개가 연달아 오는 png 파일 이름)
*[a-z][a-z]*.png
# 매칭되는 경우
Aaa.png, aa.png, ABCabcABC.png
'General' 카테고리의 다른 글
DNS, DNS 레코드 (0) | 2023.12.27 |
---|---|
웹 폰트 표시에 대해 (font-display) (0) | 2023.12.15 |
CRP (Critical Rendering Path) (0) | 2023.11.24 |
husky로 commit lint 사용하기 (0) | 2023.11.03 |
Semantic Version (SemVer) (1) | 2023.10.05 |