본문 바로가기
javascript

정규 표현식 - RegExp

by 왜 안되지 2022. 6. 20.

 

문자클래스

 

리터럴 문자를 대괄호로 감싸서 문자클래스를 만들수 있음.

문자 클래스는 그 안에 포함된 문자 중 어떤 것과도 일치.

 

/[abc]/     :     a,b,c 모두와 일치

 

대괄호 안에 포함된 문자를 제외한 나머지 문자와 일치시키는 부정 문자 클래스 ^ (캐럿)

 

/[^abc]/     :     a,b,c 를 제외한 모든 문자와 일치

 

문자 클래스 안에서 하이픈을 써서 문자 범위 표현

 

/[a-zA-Z0-9]/     :     알파벳 대소문자와 숫자 전체와 일치

/[a-zA-Z0-9-]/    :     알파벳 대소문자와 숫자 전체, 하이픈과 일치

 

정규 표현식에서 특히 자주 사용되는 문자 클래스는 특수 문자와 이스케이프 시퀀스로 짧게 쓸 수 있음.

 

문자 일치하는 문자
[...] 대괄호 안에 있는 어떤 문자에든 일치
[^...] 대괄호에 포함되지 않은 어떤 문자에든 일치
. 뉴라인을 비롯한 유니코드 줄 끝 문자(line terminator) 를 제외한 모든 문자에 일치
\w ASCII 단어 문자 전체에 일치
word 를 표현하며 '알파벳 + 숫자 + _' 중의 한 문자임을 의미한다.
[a-zA-Z0-9_] 와 동등
\W ASCII 단어가 아닌 문자 전체에 일치
non word를 표현하며 '알파벳 + 숫자 + _ '가 아닌 문자를 의미한다. 
[^a-zA-Z0-9_] 와 동등
\s space 를 표현하며 유니코드 공백 문자 전체에 일치
\S non space 를 표현하며 유니코드 공백 문자를 제외한 문자 전체에 일치
\d digit 을 표현하며 ASCII 숫자 전체에 일치
[0-9] 와 동등
\D non digit 을 표현하며 ASCII 숫자를 제외한 문자 전체에 일치
[^0-9] 와 동등
[\b] 리터럴 백스페이스
문자 클래스 밖의 \b 와 구분해야 함. (문자 클래스 밖의 \b 는 word boundary를 표현, 문자와 공백사이 일치)

 

/[\s\d]/     :    공백문자 또는 숫자 전체에 일치

 

 

반복

 

/\d\d/           :    숫자 두개에 일치

/\d\d\d\d/     :    숫자 네개에 일치

이런 식으로는 숫자가 몇개든 관계없이 찾는다거나, 글자 세 개 뒤에 숫자가 있어도 되고 없어도 된다는 식으로 찾는것은 불가능. 반복에 관련된 문법을 배워보자.

 

문자 의미
{n,m} n번 이상, m번 이하
{n,} n번 이상
{n} 정확히 n번
? 0번 또는 한번 
{0,1} 과 동등
+ 한번 이상
{1,} 과 동등
* 0번 이상
{0,} 과 동등

 

/\d{2,4}/         :     2~4개의 숫자와 일치

/\w{3}\d?/      :     정확히 세글자와 뒤에 숫자 하나가 있어도 되고 없어도 됨.

/\s+java\s+/  :     "java" 앞 뒤에 스페이스 하나 이상인 것과 일치

/[^(]*/            :     ( 를 제외한 문자 0개 이상과 일치

 

* 와 ? 반복 문자를 사용할 때 주의점

=> 이 문자들은 앞의 패턴이 없어도 됨.

     예를 들어 /a*/ 은 "bbbb" 에도 일치한다. "bbbb"에는 a가 0개 이상 존재하기 때문

 

 

대체/그룹/참조

 

문자 의미
| 대체 : or 를 표현하며, 왼쪽 또는 오른쪽의 하위 표현식과 일치
(...) 그룹 : 아이템을 그룹으로 묶어 * + ? | 등에서 한 단위로 사용하게 한다.
이 그룹에 일치하는 문자는 나중에 참조할 수 있음
(?:...) 그룹만 : 아이템을 그룹으로 묶지만 이 그룹에 일치하는 문자를 기억하지는 않음
\n n번째에 해당하는 그룹에 일치
그룹은 괄호 안에 존재하고 중첩 가능한 하위 표현식이다.
그룹 숫자는 왼쪽 괄호를 기준으로 할당되고 (?:...) 인 그룹에는 숫자가 할당되지 않음

 

대체

/ab|cd|ef/            :     "ab", "cd", "ef" 에 모두 일치

/\d{3}|[a-z]{4}/     :     숫자 세 개 또는 소문자 네 개에 일치

/a|ab/                  :      "a" 또는 "ab" 에 일치 하는데 대체 옵션은 일치하는 것을 찾을 때까지 왼쪽에서 오른쪽으로 진행하가

                                  일치하는 것을 찾으면 더 진행하지 않으므로 "ab" 에 적용하면 첫 번째 글자에만 일치 

 

그룹

/java(script)?/    :     "java" 뒤에 "script" 가 있거나 없을 때 일치

/(ab|cd)+|ef/      :     "ab" 또는 "cd" 둘 중 하나가 한 번 이상 반복된 다음 "ef" 가 있는 문자열에 일치

 

 

참조

예를 들어 실수로 반복적으로 쓴 단어들을 찾고 싶을때

 

예문 : 

He is is handsome

They are busy busy

I I am good

 

정규 표현식

/[ ]+(\w+)[ ]+\1/      

 

의 결과는

is is

busy busy

I I

가 된다.

 

\1 은 정규 표현식에서 처음 사용한 하위 표현식을 가리키고 \2, \3 은 각각 두번째, 세번째로 사용한 하위표현식 

 

 

댓글