내맘대로 살기🎉
[정규표현식] 플래그, 미리 정의된 문자 클래스&용어 본문
사실 나도 정규표현식을 직접 사용해보지 않았고, 많이 알고 있지 못하다. 공부를 하던 중에 공유하고 싶고, 정리를 하면서 머리 속 깊은 곳에 새겨두고 싶은 마음이 있어서 글을 쓰게 되었다.
함께 사용 가능한 세 가지의 플래그
i - 정규표현식이 대소문자를 구분하지 않도록 한다. /harris/i는 harris뿐만 아니라 Harris, hARris 등 대소문자를 구분하지 않는다.
regexper.com에서 확인해본 결과 Flags:Ignore Case라고 표현되는 것을 확인할 수 있다.
/harris/라고 하면 "harris"라는 문자 그대로 가져온다.
g - 지정된 패턴에 해당하는 모든 부분을 매치시킨다.
Flags를 확인해보면 Global을 확인할 수 있다.
m - 여러 줄을 포함하고 있는 문자열을 매치시킨다.
Flags를 확인해보면 Multiline을 확인할 수 있다.
용어와 연산자
- 정확히 같은 문자를 표현하는 /harris/
- 문자 클래스를 이용해서 매칭하는 [harris]
/harris/라고 작성하는 것과 [harris]라고 작성하는 것은 엄청난 차이를 보여준다.
/harris/는 밑의 사진처럼 굉장히 정확하다.
그에 반면에 [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 |
단어 내에서 문자의 경계가 아닌 문자 |
출처 - 책 : 자바스크립트 닌자 비급
나와 같은 많은 초보 개발자들에게 도움이 되었으면 좋겠습니다.
'개발자의 길 > Rregular expression(정규표현식)' 카테고리의 다른 글
[정규표현식] greedy quantifier와 non-greedy quantifier차이 (0) | 2017.05.02 |
---|