정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어입니다.
가령, 'E'로 시작하는 단어를 찾거나, 숫자를 제외한 모든 문자열을 찾아내는 등의 경우에 사용됩니다.
아래는 정규표현식을 작성하는 문법에 대해 정리한 표입니다.
POSIX 표준
| 기호 | 뜻 | 예시표현 | 가능한 문자열 |
| . | 임의의 한 문자 | a.b | aab, abb, acb, ... |
| * | 임의의 문자열 | a*b | ab, aab, aaab, abcb, ... |
| ^ | 처음 | ^abc. | abca, abcb, abcc, ... |
| $ | 끝 | .abc$ | aabc, babc, cabc, ... |
| ( ) | 하위식 | a(bb|cc)d | abbd, accd |
| { } | 좌측의 문자가 반복 | a{3}b | aaab |
| {m,} | 좌측의 문자가 m회 이상 반복 | a{3,}b | aaab, aaaab, ... |
| {m, n} | 좌측의 문자가 m회 이상, n회 이하 반복 | a{1, 3}b | ab, aab, aaab |
| [ ] | 문자 클래스. 괄호 안의 문자들에 속하는 문자 하나 |
a[b|c]d [0-9] [a-z] |
abd, acd 숫자 하나 소문자 알파벳 하나 |
| [^] | 문자 클래스 안의 문자를 제외한 나머지 | a[^b|c]d [^0-9] [^a-z] |
aad, add, aed, ... 숫자가 아닌 한 문자 소문자 알파벳이 아닌 한 문자 |
| \n | 정규식의 조건을 만족하는 n번째 문자열 (n = 1 - 9) |
abc \1 | 'abc'인 첫 번째 문자열 |
참고 : ( )는 replace( ) 등의 문자열 함수의 콜백에서 캡쳐를 가능하게 합니다.
const sequence = '123ABC123DEF';
sequence.replace(/123([A-Z]+)/g, (full, capture) => { ... })
// full : '123ABC', '123DEF'
// capture : 'ABC', ''DEF
POSIX 확장
| 기호 | 뜻 | 예시표현 | 가능한 문자열 |
| ? | 좌측의 표현식이 0회 혹은 1회 반복 | a?b | ab, b |
| + | 좌측의 표현식이 1회 이상 반복 | a+b | ab, aab, aaab, ... |
| | | 또는 | a|b | a, b |
문자 클래스
자주 쓰이는 문자 클래스 [ ]의 템플릿을 symbol로 간단하게 정의한 경우들입니다. (POSIX 기준)
| 기포 | 표현 | 의미 |
| [:alnum:] | [A-Za-z0-9] | 영숫자 |
| [:alpha:] | [ A-Za-z] | 알파벳 |
| [:lower:] | [a-z] | 소문자 |
| [:upper:] | [A-Z] | 대문자 |
| [:digit:] | [0-9] | 숫자 |
| [:xdigit:] | [A-Fa-f0-9] | 16진수 |
| [:space:] | [ \t\r\n\v\f] | 모든 공백 문자 |
| [:blank:] | [ \t] | 공백, 탭 |
| [:punct:] | [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] | 문장부호 |
| [:print:] | [\x20-\x7E] | 출력 가능한 모든 문 |
탐욕적(Greedy) & 게으른(Lazy) 정규표현식
정규표현식은 기본적으로 탐욕적으로 설계되어 있습니다.
이는 정규식에 해당하는 문자열을 찾을 때 한 번에 가장 길이가 긴 문자열을 찾으려고 한다는 것입니다.
'XquestionX XanswerX'
따라서 다음과 같은 문자열에서 정규식 'X(.+)X'는 이렇게 동작합니다.
['questionX Xanswer']
게으른 표현식은 일단 조건을 만족하는 문자열을 먼저 찾습니다.
'question'까지 간 후에 X를 넘어서지 않고, 일단 종료 조건인 X가 나왔으므로 탐색을 중단하고 새로운 문자열을 찾게 됩니다.
게으른 표현은 연산자(문자열 말고)끝에 ?를 붙여 표현합니다.
따라서 위와 동일한 문자열에서 정규식 'X(.+?)X'는 이렇게 동작합니다.
['question', 'answer']
JavaScript에서 정규표현식 사용하기
변수로 선언할 때는 '/[regexp]/' 형태 혹은 RegExp( ) 객체로 선언합니다.
const regex = /abc/;
const regex = new RegExp("abc");
변수로 선언하지 않고 바로 사용할 때는 '/[regexp]/g' 형태로 사용합니다.
/hello/g.test("hello world"); // true
/\d+/g.exec("abc123def"); // ['123']
"2025-09-17".replace(/-/g, "/"); // "2025/09/17"728x90