정규표현식 (Regex)
정규표현식(正規表現式, Regular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단이다.
"정규식"과 "정규표현식"은 같은 말입니다. "정규표현식"을 줄여서 "정규식"이라고 합니다. 영어로는 "Regular Expression (레귤러 익스프레션)"이라고 하는데, 이것이 너무 길기에, Regexp 또는 더 줄여서 Regex 라고 간편히 기술합니다. 즉 정규식이라는 것은 "문자열을 다루는 공식". 수학에 숫자를 다루는 공식이 있듯이, 프로그래밍에서 "ABC" "가나다라" 등의 문자열을 처리할 때 사용하는 것입니다: 참고사이트 |
정규식 패턴(표현식)
표현식의 다양한 특수기호(패턴)는 그 기호의 의미(기능)와 매칭되어 인식되지 않기 때문에 따로 외우지 않으면 의미를 파악할 수가 없습니다.
우선 기본적인 의미를 아래의 표에 정리했습니다.
정규식 패턴설명
^ | 줄(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)할 그룹 |
(?<>) | 캡처 그룹 이름 지정, /(?<name>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)된 값 참조 |
https://heropy.blog/2018/10/28/regexp/
나중에 살펴보면 좋을듯
https://zzokma.tistory.com/1644
https://blogpack.tistory.com/560
https://hitomis.tistory.com/68
https://moondol-ai.tistory.com/251
https://haranglog.tistory.com/7
https://blog.outsider.ne.kr/360
https://ahkscript.github.io/ko/docs/misc/RegEx-QuickRef.htm
'React > Form Validation' 카테고리의 다른 글
[React] Form 유효성 검사 : Input 글자 수 제한 (0) | 2023.04.07 |
---|---|
[React] Form 유효성 검사 : RegExp 객체 (0) | 2023.04.07 |