정규표현식

hb-developer·2021년 4월 19일
0

정규표현식이란?

정규표현식(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 | ba 또는 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가 아닌 나머지 문자에 일치(부정)
\ 이스케이프 문자, /.\?\/$\^/
\b63개 문자(영문 대소문자 52개 + 숫자 10개 + _(underscore))가 아닌 나머지 문자에 일치하는 경계(boundary)
\B63개 문자에 일치하는 경계
\d숫자(Digit)에 일치
\D숫자가 아닌 문자에 일치
\p{}유니코드 속성(Property) 집합에 맞는 문자에 일치, /\p{Emoji}/u ES2018
\P{}유니코드 속성 집합에 맞지 않는 문자에 일치, /\p{Uppercase}/u ES2018
\s공백(Space, Tab 등)에 일치
\S공백이 아닌 문자에 일치
\w63개 문자(Word, 영문 대소문자 52개 + 숫자 10개 + _)에 일치
\W63개 문자가 아닌 나머지 문자에 일치
\x16진수 문자에 일치, /\x61/는 a에 일치
\08진수 문자에 일치, /\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/

profile
배우면 바뀐다

0개의 댓글

관련 채용 정보