> For the complete documentation index, see [llms.txt](https://noah-dev.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://noah-dev.gitbook.io/til/reg-exp/searchcriteria.md).

# 검색 기준 패턴

## 0. 요약

| 기호     | 의미                        |
| ------ | ------------------------- |
| \|     | OR                        |
| \[]    | 괄호안의 문자들 중 하나. `or` 처리 묶음 |
| \[^문자] | 괄호안의 문자를 제외한 것            |
| ^문자열   | 특정 문자열로 시작(시작점)           |
| 문자열$   | 특정 문자열로 끝남(종착점)           |

***

## 1. | 패턴

`|` 패턴은 `OR`조건으로 연결시킨다.

### 1-1. | 패턴 사용예시

정규 표현식은 `/hi|me/`이다. `hi`또는 `me` 단어를 찾는 정규식이다.

![|](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-7b62863dfcc5c3164f1ac4a7091380640315e973%2FregExpPattern1.png?alt=media)

***

## 2. \[] 패턴

`[]` 패턴은 괄호안의 문자들 중 하나라는 뜻으로 `or`를 처리하기 위해 사용하는 묶음이라고 생각하면 된다. 괄호안에 문자들을 넣어 사용한다.

주의할 점은 괄호안의 문자는 하나의 단어가 아니라 개별적인 문자들로 이루어져 있다는 것이다. 예를 들어 `/[abc]/`은 `abc` 단어를 포함하는 것이 아니라 `a` 또는 `b` 또는 `c`를 포함하는 것을 찾는 패턴이다.

* /abc/: "abc"를 포함하는
* /\[abc]/: "a" 또는 "b" 또는 "c"를 포함하는

### 2-1. \[] 패턴을 사용하지 않은 예시

정규 표현식이 `/name/g`이다.

* /name/: `name`단어를 찾는다.
* g: 문자열 내 모든 패턴을 검색한다. 결과가 하나 이상일 수 있다.

결과는 아래와 같다.

![\[\] 패턴 사용하지 않음](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-08b1df82eabdad30fc4e3ea3d8f6a66a8cde3b7c%2FregExpPattern2.png?alt=media)

### 2-2. \[] 패턴 사용예시

이번엔 정규 표현식인 `/[name]/g`이다.

* /\[name]/: `n`, `a`, `m`, `e` 문자를 찾는다.
* g: 문자열 내 모든 패턴을 검색한다. 결과가 하나 이상일 수 있다.

즉, 문자열 내 모든 `n`, `a`, `m`, `e` 문자를 찾는 정규 표현식이다. 결과는 아래와 같다.

![\[\] 패턴 사용함](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-adc124c5dfff4b412a2258b2eb97dfb8f1f52ea4%2FregExpPattern3.png?alt=media)

***

## 3. \[^문자] 패턴

`[^문자]` 패턴은 `[]` 패턴과 반대의 개념으로 이해하면 된다. 즉, 괄호안의 문자를 제외한 것을 찾는 패턴이다.

### 3-1. \[^문자] 패턴 사용예시

정규 표현식은 `/[^name]/g`이다.

* /\[^name]/: `n`, `a`, `m`, `e` 를 제외한 문자를 찾는다.
* g: 문자열 내 모든 패턴을 검색한다. 결과가 하나 이상일 수 있다.

바로 위에서 살펴본 `3-2. [] 패턴 사용 예시`와 반대의 결과가 나타난다.

![\[^문자\] 패턴 사용 예시](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-0c2312bede8e08acb18f1f7a226c114d651a1876%2FregExpPattern4.png?alt=media)

***

## 4. ^문자열 패턴

`^` 기호가 괄호 밖에서 사용되면 문장의 시작을 뜻한다. 즉 `^문자열` 패턴은 찾는 패턴이 문장의 처음에 있는 경우를 찾는다. 문자열이 문장의 시작점에 있어야 한다.

### 4-1. ^문자열 패턴 사용예시 1

정규 표현식은 `/^H/`이다. `H`로 시작하는 문장이 있는 경우를 찾는다.

![^문자열 패턴 사용예시 1](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-55030811533bdc8d663e4ba5137ea6a5739ae88e%2FregExpPattern5.png?alt=media)

### 4-2. ^문자열 패턴 사용예시 2

정규 표현식은 `/^W/`이다. `W`로 시작하는 문장이 있는 경우를 찾는다.

일치하는 패턴이 없으므로 아무것도 찾지 못한다.

![^문자열 패턴 사용예시 2](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-6a59732daafc5d266f3544a21701773efc61da58%2FregExpPattern6.png?alt=media)

### 4-3. ^문자열 패턴 사용예시 3

정규 표현식은 `/^[HW]/gm`이다.

* /^\[HW]/: `H` 또는 `W`로 시작하는 문장이 있는 경우를 찾는다.
* g: 문자열 내 모든 패턴을 검색한다. 결과가 하나 이상일 수 있다.
* m: 줄 바꿈을 허용한다.

이번에는 `[]`패턴과 함께 사용하였다. `^`가 괄호 밖에서 사용됨으로 이는 문장의 시작의 경우를 찾는 패턴이다. 만약 괄호 안에서 사용되었으면 다른 의미를 가지게 된다.

또한 `m` 플래그를 사용함으로써 줄 바꿈을 허용하여 다른 행에서도 `H`또는 `W`로 시작하는 문장이 있는 경우를 찾는다.

![^문자열 패턴 사용예시 3](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-60c8c49e5807bb7adb28f53316299e6decc8c00f%2FregExpPattern7.png?alt=media)

***

## 5. 문자열$ 패턴

`^문자열` 패턴이 문장의 시작점을 뜻한다면 `문자열$` 패턴은 문장의 종착점을 뜻한다. 즉, 찾는 패턴이 문장의 끝에 있는 경우를 찾는다.

### 5-1. 문자열$ 패턴 사용예시

정규 표현식은 `/name\?$/`이다. `name?`으로 끝나는 문장이 있는 경우를 찾는다.

![문자열$ 패턴 사용예시](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-04ca8f724496c40bbb8eecfa18d23f78005edc37%2FregExpPattern8.png?alt=media)

***

## 6. Conclusion

> 검색 기준 패턴에 대해 정리하였다. `\b`, `\B` 패턴은 다른 패턴보다 헷갈리는 면이 있는 듯하여 이해하기가 어려웠다. 또한 아직 한 번도 사용해보지 않은 패턴이었기 때문에 생소한 느낌이 들었다. 지금은 감만 잡을 뿐 아직 적절히 사용할 수 있는 힘은 부족하다. 실전에서 많이 사용하고 싶다. -> 해당 정규식은 `정규식 특정 문자 숫자 매칭 패턴`으로 이동\
> 다른 패턴은 코딩 테스트세어 자주 봤던 패턴이라 정리하는 데 큰 어려움이 없었다. 오히려 의미를 모르고 사용했기에 정리를 하면서 가려웠던 부분을 시원하게 긁은 느낌이어서 좋았다. 점점 패턴을 많이 정리하고 사용하게 될 텐데 헷갈리지 않도록 조심하도록 하자.

***

## 참고

[\[JS\] 📚 정규표현식(RegExp) - 이해하기 쉽게 정리 + 응용 예제](https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%A0%95%EA%B7%9C%EC%8B%9D-RegExp-%EB%88%84%EA%B5%AC%EB%82%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC)\
[정규표현식(Regular Expression, regex)](https://blog.walkinpcm.com/15)

***

📅 2023-01-24
