정규표현식(Regular Expression: Regexp) 은 특정 패턴의 문자열을 찾기위한 표현식 입니다.
생성 방법엔 두가지가 있습니다.
new RegExp('pattern',flags) // 생성자 방식
/pattern/flags // 리터럴 방식
정규 표현식에서의 플래그는 옵션을 뜻합니다. 검색을 어떻게 할지 정하는 필터 같은거죠
자바스크립트 에서는 6가지 플래그를 지원합니다. g i m u s y 🤔
g g플래그가 없으면 첫번째 패턴만 찾고 반환이 되지만 g플래그가 있으면 모두 찾습니다.
i 대문자와 소문자를 모두 찾습니다.
m 다중 행 모드(multiline mode)를 활성화합니다. 문자의 행이 바뀌어도 검색을 합니다.
u 유니코드; 패턴을 유니코드 코드 포인트의 나열로 취급합니다.
s .이 개행 문자 \n도 포함하도록 ‘dotall’ 모드를 활성화합니다.
y 문자 내 특정 위치에서 검색을 진행하는 ‘sticky’ 모드를 활성화 시킵니다.
regexp.test(str) str 이 포함되있으면 true 를 없으면 false 를 반환합니다.
str.match(regexp) 정규표현식에 맞는 문자열을 배열로 반환합니다.
만약 조건에 맞는 문자열이 없으면 null 을 반환합니다.
str.replace(regexp, replacement) 는 문자열이나 regexp 에서 찾은 패턴을
replacement로 바꿉니다.
replacement에서 $& 를 사용하면str + replacement을 반환합니다.
replacement에서 $' 를 사용하면str에서regexp을 지우고replacement을 붙여서 반환합니다.
정규식 패턴 기호 입니다.
| 정규식 패턴 | 설명 |
|---|---|
| ^ | 줄(Line)의 시작에서 일치, /^abc/ |
| $ | 줄(Line)의 끝에서 일치, /xyz$/ |
| . | 임의의 한 문자와 일치 |
| a | b | a 또는 b와 일치, 인덱스가 작은 것을 우선 반환 |
| * | 0회 이상 연속으로 반복되는 문자와 가능한 많이 일치, {0,}와 동일 |
| *? | 0회 이상 연속으로 반복되는 문자와 가능한 적게 일치(lazy), {0}와 동일 |
| + | 1회 이상 연속으로 반복되는 문자에 가능한 많이 일치, {1,}와 동일 |
| +? | 1회 이상 연속으로 반복되는 문자에 가능한 적게 일치(lazy), {1}와 동일 |
| ? | 없거나 1회 가능한 많이 일치 |
| ?? | 없거나 1회 가능한 적게 일치(lazy) |
| {3} | 3(숫자)개 연속 일치 |
| {3,} | 3개 이상 연속 일치 |
| {3,5} | 3개 이상 5개 이하(3~5개) 연속 일치 |
| {3,5}? | 3개 이상 5개 이하(3~5개) 연속 중 가능한 적은 3개 연속 일치(lazy), {3}와 동일 |
| () | 캡처(Capture)할 그룹 |
| (?<>) | 캡처 그룹 이름 지정, /(?pattern)/ ES2018 |
| \1~9 | 정규식 내 캡처된 값 참조, /(abc)\1/ |
| (?:) | 캡처(Capture)하지 않는 그룹 |
| (?=) | 앞쪽 일치(Lookahead), /ab(?=c)/ |
| (?!) | 부정 앞쪽 일치(Negative Lookahead), /ab(?!c)/ |
| (?<=) | 뒤쪽 일치(Lookbehind), /(?<=ab)c/ ES2018 |
| (?<!) | 부정 뒤쪽 일치(Negative Lookbehind), /(?<!ab)c/ ES2018 |
| [abc] | a 또는 b 또는 c와 일치, 점(.)이나 별표(*) 같은 특수 문자는 []안에서 특수 문자가 아님, /.[.]/ |
| [a-z] | a부터 z 사이의 문자 구간에 일치(영어 소문자) |
| [A-Z] | A부터 Z 사이의 문자 구간에 일치(영어 대문자) |
| [0-9] | 0부터 9 사이의 문자 구간에 일치(숫자) |
| [가-힣] | 가부터 힣 사이의 문자 구간에 일치(한글) |
| [2-7] | 2부터 7 사이의 문자 구간에 일치(2,3,4,5,6,7) |
| [b-f] | b부터 f 사이의 문자 구간에 일치(b,c,d,e,f) |
| [다-바] | 다부터 바 사이의 문자 구간에 일치(다,라,마,바) |
| [^abc] | a 또는 b 또는 c가 아닌 나머지 문자에 일치(부정) |
| \ | 이스케이프 문자, /.\?\/$\^/ |
| \b | 63개 문자(영문 대소문자 52개 + 숫자 10개 + _(underscore))가 아닌 나머지 문자에 일치하는 경계(boundary) |
| \B | 63개 문자에 일치하는 경계 |
| \d | 숫자(Digit)에 일치 |
| \D | 숫자가 아닌 문자에 일치 |
| \p{} | 유니코드 속성(Property) 집합에 맞는 문자에 일치, /\p{Emoji}/u ES2018 |
| \P{} | 유니코드 속성 집합에 맞지 않는 문자에 일치, /\p{Uppercase}/u ES2018 |
| \s | 공백(Space, Tab 등)에 일치 |
| \S | 공백이 아닌 문자에 일치 |
| \w | 63개 문자(Word, 영문 대소문자 52개 + 숫자 10개 + _)에 일치 |
| \W | 63개 문자가 아닌 나머지 문자에 일치 |
| \x | 16진수 문자에 일치, /\x61/는 a에 일치 |
| \0 | 8진수 문자에 일치, /\141/은 a에 일치 |
| \u | 유니코드(Unicode) 문자에 일치, /\u0061/는 a에 일치 |
| \c | 제어(Control) 문자에 일치 |
| \f | 폼 피드(FF, U+000C) 문자에 일치 |
| \n | 줄 바꿈(LF, U+000A) 문자에 일치 |
| \r | 캐리지 리턴(CR, U+000D) 문자에 일치 |
| \t | 탭 (U+0009) 문자에 일치 |
| $` | 문자 대체(replace) 시 일치한 문자 이전 값 참조 |
| $' | 문자 대체(replace) 시 일치한 문자 이후 값 참조 |
| $+ | 문자 대체(replace) 시 마지막으로 캡처된 값 참조 |
| $& | 문자 대체(replace) 시 일치한 문자 결과 전체 참조 |
| $_ | 문자 대체(replace) 시 입력(input)된 문자 전체 참조 |
| $1~9 | 문자 대체(replace) 시 캡처(Capture)된 값 참조 |
참고 자료(References)
https://heropy.blog/2018/10/28/regexp/