정규 표현식(regular expression, 간단히 regexp 또는 regex) 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴이다.
예를 들면, 많은 텍스트 중에 전화번호 패턴을 찾거나 웹사이트 형태의 패턴을 찾을 때도 사용할 수 있고, 찾은 패턴을 다른 문자열로 변환할 수도 있다. 또는 사용자가 입력한 데이터가 이메일이나 패스워드와 같은 특정한 패턴에 부합하는지 유효성 검사를 할 때도 사용할 수 있다.
정규 표현식은 대부분의 프로그래밍 언어와 코드 에디터에 내장되어 있다.
/regexp/i
정규 표현식 리터럴은 위와 같이 패턴(regexp)과 플래그(i)로 구성된다.
패턴은 /로 열고 닫으며 문자열의 따옴표는 생략한다.
| Character | 뜻 |
|---|---|
| | | 또는 |
| ( ) | 그룹 |
| [ ] | 문자셋, 괄호 안의 어떤 문자든 |
| [^] | 부정 문자셋, 괄호 안의 어떤 문자가 아닐 때 |
| (?:) | 찾지만 기억하지는 않음 |
| : 또는
() : 그룹
(?:) : 찾지만 기억하지는 않음
[] : 문자셋, 괄호 안의 어떤 문자든

[^] : 부정 문자셋, 괄호 안의 어떤 문자가 아닐 때
| Character | 뜻 |
|---|---|
| ? | 없거나 있거나 (zero or one) |
| * | 없거나 있거나 많거나 (zero or more) |
| + | 하나 또는 많이 (one or more) |
| {n} | n번 반복 |
| {min,} | 최소 |
| {min,max} | 최소와 최대 |
? : 없거나 있거나 (zero or one)
* : 없거나 있거나 많거나 (zero or more)
+ : 하나 또는 많이 (one or more)
{n} : n번 반복
{min,} : 최소
{min,max} : 최소와 최대
| Character | 뜻 |
|---|---|
| \b | 단어 경계 |
| \B | 단어 경계가 아님 |
| ^ | 문장의 시작 |
| $ | 문장의 끝 |
\b : 단어 경계

\B : 단어 경계가 아님

^ : 문장의 시작
$ : 문장의 끝
| Character | 뜻 |
|---|---|
| \ | 특수 문자가 아닌 문자 |
| . | 어떤 글자 (줄바꿈 문자 제외) |
| \d | digit 숫자 |
| \D | digit 숫자 아님 |
| \w | word 문자 |
| \W | word 문자 아님 |
| \s | space 공백 |
| \S | space 공백 아님 |
\ : 특수 문자가 아닌 문자

. : 어떤 글자 (줄바꿈 문자 제외, 공백은 포함)

\d : digit 숫자
\D : digit 숫자 아님
\w : word 문자
\W : word 문자 아님
\s : space 공백 (줄바꿈 제외)
\S : space 공백 아님 (줄바꿈 제외)
패턴과 함께 정규 표현식을 구성하는 플래그는 정규 표현식의 검색 방식을 설정하기 위해 사용한다. 플래그는 옵션이므로 선택적으로 사용할 수 있으며, 순서와 상관없이 하나 이상의 플래그를 동시에 설정할 수도 있다.
| 플래그 | 의미 | 설명 |
|---|---|---|
| i | Ignore case | 대소문자를 구별하지 않고 패턴 검색 |
| g | Global | 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색 |
| m | Multi line. | 문자열의 행이 바뀌더라도 계속 패턴 검색 |

i : 대소문자를 구별하지 않고 한 번만 검색
g : 대소문자를 구별하여 전역 검색
ig : 대소문자를 구별하지 않고 전역 검색
-, ., 으로 연결됨)/\d{2,3}[- .]\d{3}[- .]\d{4}/gm

[a-zA-Z0-9._+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.]+

(?:https?:\/\/)?(?:www\.)?youtu\.be\/([a-zA-Z0-9-]{11})
()그룹으로 남겨두고 필요없는 그룹은 (?:)
// 퀴즈 3번 예제
const url = 'https://www.youtu.be/-ZClicWm0zM';
const regex = /(?:https?:\/\/)?(?:www\.)?youtu\.be\/([a-zA-Z0-9-]{11})/;
const result = url.match(regex);
return result[1];
// -ZClicWm0zM
📍
[JS] 정규 표현식 사용하기
https://velog.io/@liankim/JS-RegExp


MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
youtube 드림코딩 https://www.youtube.com/watch?v=t3M6toIflyQ
이웅모, 『모던 자바스크립트 Deep Dive』, 위키북스