정규식(Regex)
Regex는 정규 표현식으로 문자열의 검색, 치환, 분리 등을 위해 사용되는 형식 언어이다.
이는 복잡하거나 반복되는 문자열 작업을 간결하고 효율적으로 처리할 수 있도록 도와준다.
기본 문법
리터럴 문자
대부분의 문자는 그 자체로 해석된다.
예를 들어, hello는 'hello'라는 문자열과 일치한다.
메타 문자
특별한 의미를 가진 문자로 다음과 같은 종류가 있다.
- '.': 임의의 한 문자와 일치한다.
- '^': 문자열의 시작과 일치한다.
- '$': 문자열의 끝과 일치한다.
- '*': 바로 앞의 문자가 0번 이상 반복되는 경우와 일치한다.
- '+': 바로 앞의 문자가 1번 이상 반복되는 경우와 일치한다.
- '?': 바로 앞의 문자가 0번 또는 1번 있는 경우와 일치한다.
- {n}: 바로 앞의 문자가 n번 반복되는 경우와 일치한다.
- {n,}: 바로 앞의 문자가 n번 이상 반복되는 경우와 일치한다.
- {n,m}: 바로 앞의 문자가 최소 n번, 최대 m번 반복되는 경우와 일치한다.
- [ ]: 대괄호 안의 어떤 한 문자와 일치한다.
[abc]는 'a', 'b', 'c' 중 하나와 일치한다는 것을 의미한다. - |: 두 패턴 중 하나와 일치하는 것으로 a|b인 경우는 a 또는 b와 일치한다.
- ( ): 괄호 안의 패턴을 하나의 단위로 취급하여 그룹핑에 사용된다.
범위 표현
- [1-9]: 대괄호 내에 하이픈(-)을 사용하여 숫자 범위를 지정한다.
위 예에서는 1부터 9까지의 숫자 중 하나와 일치한다는 것을 의미한다. - [a-z]: 소문자 a부터 z까지의 알파벳 중 하나와 일치한다.
동일하게 대문자 [A-Z]는 대문자 A부터 Z까지와 일치한다. - [A-Za-z]: 조건을 붙여 쓰면 이처럼 대문자 A부터 Z 그리고 소문자 a부터 z까지의 알파벳 중 하나와 일치하는 것을 의미한다.
부정 문자
- [^a]: 대괄호 내부에서 ^이 사용되면 이는 부정 문자를 나타내는 것으로 이 예시에서는 a를 제외한 모든 문자와 일치하는 것을 의미한다.
이스케이프 문자
- \: 백슬래시는 특수 문자 앞에 사용되어 메타 문자를 리터럴 문자로 사용하고 싶을 때, 즉 특별한 기능을 무시하고 문자 그대로 해석하고 싶을 때 사용한다.
예를 들어 '.'의 경우는 어떤 한 문자와 일치하는 것을 나타내는 메타문자 이지만 '\.'는 리터럴 문자로'.'을 사용한 것과 일치한다.
특수 문자 시퀀스
- \d: 이는 숫자를 나타내는 간결한 방법으로 [0-9]와 일치한다.
- \w: 알파벳, 숫자, 밑줄 문자를 포함한 것으로 단어 문자([A-Za-z0-9_])와 일치한다.
- \s: 스페이스, 탭과 같은 공백 문자와 일치한다.
활용 방법
문자열 검색
만약 'hello world'.match(/h.*/)라는 구문이 주어지면 h로 시작하는 문자열 중에서 h뒤에 0번이상 반복되는 부분을 출력함으로 해당하는 패턴이 포함된 hello world라는 결과 문자열이 반환 된다.
문자열 치환
'Hello World'.replace(/World/, 'bye')는 'Hello World'를 'Hello bye'로 문자열 내에서 특정 패턴을 찾아 다른 문자열로 교체한다.
문자열 분리
'one,two,three'.split(/, /)는 ','라는 특정 패턴을 기준으로 문자열을 여러 부분으로 나누어 배열로 반환한다.
데이터 검증
이메일이나 전화번호와 같이 사용자 입력이 정해져 있는 특정 형식에 맞는지 검증합니다.
예를 들어 이메일 주소 형식 검증에는 /^[^@]+@[^@]+\.[^@]+$/를 사용할 수 있습니다.
이를 해석하면 ^[^@]+는 문자열 시작부분에 @가 아닌 하나 이상의 문자열로 시작하고, @문자가 온 다음에 [^@]+에서 @가 아닌 하나 이상의 문자가 온 다음 \.로 '.'이 입력되고, [^@]+로 @가 아닌 하나 이상의 문자로 끝이 난다는 것을 의미한다.