Javascript

정규 표현식과 메타문자 총정리

Rachel_ 2022. 4. 21. 18:19

정규표현식

(REGEX/REGEXP : rugular expresstion)

: 특정 패턴을 가진 문자열을 찾거나 또는 찾아서 변경(치환)할 때 사용되는 형식 언어.

 정규표현식을 이용하면 문자열에 대해 특정 패턴 조건 검사 시 또는 치환 시 복잡한 조건을 제시할 필요 없이 간단하게 처리 가능해진다.

 

필요성

: 찾으려는 문자열 또는 바꾸려는 문자열의 규칙이 복잡하다면, 정규표현식을 사용하였을 때 코드가 매우 간결해진다.

 

 

정규표현식 작성 방법

종류 메소드명
(정규식:regExp
/문자열:str)
반환형 결과
정규표현식에서 제공하는 메소드
(정규식.메소드명(문자열) 형태
regExp.test(str); boolean 문자열 안 정규식 값의 유무
regExp.exec(str); string 문자열에서 정규식 값과 일치하는 값의 처음 매칭된 문자열 반환. 없을 경우 null 반환
String 객체에서 제공하는 메소드
(문자열.메소드명(정규식) 형태
str.match(regExp); String 문자열에서 정규식 값과 일치하는 값을 찾아 반환
str.search(regExp); int 문자열에서 정규식 값과 일치하는 값의 인덱스 반환. 없을 경우 -1로 반환
str.replace(regExp, "바꿀값"); String 문자열에서 정규식 값과 일치하는 첫번쨰 부분의 문자열을 바꿀값 으로 변환
str.split(regExp); String 정규식에서 지정된 값을 구분자로 문자열을 쪼갬.

 

메타문자

: 본래 그 문자가 가진 의미가 아니라 특별한 용도로 사용되는 문자들을 의미한다.

==> . ^ $ * + ? { } [ ] \ | ( ) ;

 

 

메타문자의 작성은 regExp = /메타문자/ 의 형태를 가져간다. 

메타문자의 종류 특징 결과
/ ^[]or문자or... / ~으로 시작 [] 안의 값 or ^바로 뒤에 사용된 문자로 시작되는 값을 찾는 정규표현식이다.
/ [^~] / 아닌 것(부정) ^가 문자클래스 안으로 들어가게 되면 부정의 의미를 띈다. [^0~9] 의 의미는 0~9가 아닌 값을 찾는 정규표현식이 된다.
/ a.b / 1개라도 존재 . 의 메타문자는 a와 b 사이에 그 어떤 문자라도 1개 이상 존재한다는 정규표현식을 의미한다. 
aab, a0b 는 따라서 true 가 나온다. 하지만 abc 는 a와 b사이에 문자가 없기 때문에 false 이다.
/ abc*d / 0번 이상 반복 * 바로 앞 문자의 반복을 의미한다. 반복은 0번부터 가능하다.
abd abcd abccd abcccd 모두 true 값이 나온다.
/ abc+d / 1번 이상 반복 + 바로 앞 문자의 반복을 의미한다. 반복은 1번 이상부터 가능하다.
abd 는 따라서 false 이며, abcd abccd abcccd 는 true 값이 나온다.
/ {m} / str.length = m  
/ {m, } / str.length >= m  
/ {, n} / str.length <= n  
/ {m, n} / str.length >= m
&& str.length <= n
 
/ ? / 0 또는 1  

 

 

- \d : 숫자와 매치, [0-9]와 동일한 표현식이다. 
- \D : 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
- \s : whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다. 
- \S : whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
- \w : 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
- \W : 문자+숫자(alphanumberic)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.