내맘대로 살기🎉

[정규표현식] 플래그, 미리 정의된 문자 클래스&용어 본문

개발자의 길/Rregular expression(정규표현식)

[정규표현식] 플래그, 미리 정의된 문자 클래스&용어

해림😶 2017. 5. 31. 23:17



사실 나도 정규표현식을 직접 사용해보지 않았고, 많이 알고 있지 못하다. 공부를 하던 중에 공유하고 싶고, 정리를 하면서 머리 속 깊은 곳에 새겨두고 싶은 마음이 있어서 글을 쓰게 되었다. 


함께 사용 가능한 세 가지의 플래그 


i - 정규표현식이 대소문자를 구분하지 않도록 한다. /harris/i는 harris뿐만 아니라 Harris, hARris 등 대소문자를 구분하지 않는다.

regexper.com에서 확인해본 결과 Flags:Ignore Case라고 표현되는 것을 확인할 수 있다.

 /harris/라고 하면 "harris"라는 문자 그대로 가져온다.


g - 지정된 패턴에 해당하는 모든 부분을 매치시킨다.

 Flags를 확인해보면 Global을 확인할 수 있다.


m - 여러 줄을 포함하고 있는 문자열을 매치시킨다.

   Flags를 확인해보면 Multiline을 확인할 수 있다.



용어와 연산자


- 정확히 같은 문자를 표현하는 /harris/

- 문자 클래스를 이용해서 매칭하는 [harris]


/harris/라고 작성하는 것과 [harris]라고 작성하는 것은 엄청난 차이를 보여준다.


/harris/는 밑의 사진처럼 굉장히 정확하다. 

출처 : http://www.regexr.com/


그에 반면에 [harris]를 확인해보자. One of: 라고 씌여있는 것을 확인할 수 있다. 엄청난 차이가 있지 않은가 ? 정확히 알고 사용하지 않으면, 큰 낭패다.


- 문자 클래스([])를 이용할 때, [^harris]로 캐럿(^)문자를 넣으면 None of:가 보일 것이다. 이것은 직접 regexr.com에서 확인해봐도 좋다. 기억해야한다. 문자 클래스([])를 사용할 때만, ^(캐럿 문자)는 None of이다.

- [a-z] 혹은 [가-하]같은 형식으로 매치시키고 싶은 범위를 지정해줄 수도 있다. 한글도 된다. 알파벳으로 검색할 때, 대소문자 구분을 할까 ? 

한다. 정확하다. 그래서 소문자 혹은 대문자만 매치시킬 수 있고, 상관없다면 위에서 쓴 i 플래그를 사용하자.


- 이스케이핑 문자가 있는데, 그냥 문자 앞에 \(역슬래쉬)를 넣어주자.


- 가장 첫 문자 혹은 가장 마지막 문자를 매치시키려면 /^harris/ (가장 첫 문자)혹은 /harris$/(가장 마지막 문자)이다.  


- 반복된 문자를 매치하는 방법이 여러가지 있다. ('?', '+', '*', '{}', ',(콤마)')

 ㄴ> " ? "를 이용. ex) /h?arris/는 'harris', 'arris'

글로 이해하기 어렵다면 시각화시켜주는 사이트에 가서 확인해보자. 나는 너무 좋다 이 사이트가..


ㄴ> " + "를 이용. ex) /h+arris/는 'harris', 'hharris', 'hhharris' but ! not 'arris'

시각화 시각화 !!!


ㄴ> " * "를 이용. ex) /h*arris/는 결과값은 위의 ?와 +를 합쳤다고 생각하면 된다.

위의 것과 비교해보면 보이는가 ? 완전 욕심쟁이다. 두가지 기능 다 있다.


ㄴ> " {} "를 이용. ex) /h{3}arris/는 harrisss이다. 그렇다면, /harris{3}/은 harrisharrisharris인가 ?! 

당연히 ! 아니다. harrisss이다. 

 확인이 가능하다. 사실 제가 /harris{3}/은 harrisharrisharris인가 ? 하고 검색해봤습니다. ㅎㅎ 아니더라구요.


ㄴ> " ,(콤마) "를 이용. ex) /h{3,5}arris/는 'hhharris', 'hhhharris', 'hhhhharris' 이다.

/h{3,}arris/로 하면 hhharris에서 h가 3개 이상인 것은 모두 매치시킨다.


- 미리 정의 된 문자 클래스

 \t

 수평탭

 \b 

 백스페이스 

 \v 

 수직탭 

 \f 

 폼피드 

 \r 

 개행 문자 

 \n 

 줄바꿈 문자 

 \cA : \cZ 

 제어문자 

 \x0000 : \xFFFF 

 유니코드 16진수 

 \x00 : \xFF 

 아스키 16진수 

 . 

 줄바꿈 문자(\n)를 제외한 모든 문자 

 \d 

 0-9 사이의 10진수 숫자. [0-9]와 같다  

 \D 

 0-9 사이의 10진수 숫자에 속하지 않는 모든 문자. [^0-9]와 같다 

 \w 

 _를 포함한 모든 영어 알파벳과 숫자. [A-Za-z0-9_]와 같다

 \W 

 영어 알파벳과 숫자 그리고 _가 아닌 모든 문자.

 \s 

 공백문자(공백, 탭, 폼피드 등)

 \S 

 공백문자를 제외한 문자

 \b

 단어의 경계를 나타내는 문자 

 \B 

 단어 내에서 문자의 경계가 아닌 문자 

출처 - 책 : 자바스크립트 닌자 비급



나와 같은 많은 초보 개발자들에게 도움이 되었으면 좋겠습니다.


반응형
Comments