티스토리 뷰

Javascript

[Javascript] 정규표현식

묵지수 2019. 8. 6. 00:34
무제

정규표현식

  • RegExp 생성자로 생성하거나 리터럴 방법으로 생성가능하다.
  • 정규식 패턴이 바뀌는 경우 생성자 함수를 사용하여 동적으로 정규식을 만들어 준다.

 

정규식 패턴

  • 단순한 문자열로 만들거나 특수문자와 단순 문자열의 조합으로 패턴을 생성할 수 있다.

단순 문자열

  • 직접 찾고자하는 문자열로 정규식을 구성한다.

 

특수문자를 사용한 패턴

  • 하나 이상의 문자를 찾거나 다양한 문자열을 찾기 위해 사용된다.
  • 위의 정규표현식은 a뒤에 0개 이상의b가 나오고 뒤에 c가 이어지는 문자열을 찾는다.

 

정규표현식에서 특수문자 종류와 의미

1 \
  1. 단순문자 앞에서 \
  • 단순문자 앞의 \는 새로운 의미를 가지게 된다.
  • /a\d/\d는 d를 의미하지 않고 0부터 9까지의 숫자를 의미한다.

 

  1. 특수문자 앞에서 \
  • 특수문자 앞의 \는 해당 특수문자를 단순문자로서 해석하게 된다.
  • /a\*/\*로 인하여 aaaaaaaaa와 매칭되지 않고 a*와 매칭된다.

 

2 ^
  • 입력의 시작 문자열에 매칭된다.
  • Multi-line 플래그가 참으로 설정되어 있으면 줄 바꿈 문자 바로 다음 문자에도 매칭된다.
  • /^A/는 "An e"의 첫번째 A와 매칭되지만 "an A"와는 매칭되지 않는다.

 

3 $
  • 입력의 끝 문자열에 매칭된다.
  • Multi-line 플래그가 참으로 설정되어 있으면 줄 바꿈 바로 전 문자에도 매칭된다.

 

4 *
  • 0번 이상 반복되는 문자열에 매칭된다.
  • {0,}과 동일하다.
  • /bo*/은 "A ghost booooed"의 "boooo"과 매칭된다.
  • /bo*/은 "A bird warbled"의 'b'에 매칭된다.
  • /o*/에서 문자열에 o가 존재하지 않으면 빈 문자가 매칭된다.

 

5 +
  • 1번 이상 반복되는 문자열에 매칭된다.
  • {1,}과 동일하다.

 

6 ?
  • 0~1번 반복되는 문자열에 매칭된다.

  • {0, 1}과 동일하다.

  • *, +, ?, {} 패턴 뒤에 ? 패턴을 사용하면, 가능한 가장 적은 문자열을 매칭시킨다.

    • /\d+/는 "123abc"에 "123"과 매칭된다.
    • /\d+?/의 경우는 "123abc"에 '1'만 매칭된다.

 

7 .
  • 개행 문자를 제외한 모든 단일 문자와 대응된다.

  • /.n/은 "nay, an apple is on the tree"에서 'an'과 'on'에 대응되지만, 'nay' 에는 대응되지 않는다.

    • nay는 시작이므로 개행문자가 삽입되어 있다.

 

8 (x)
  • x에 일치하고 일치한 것을 기억한다.
  • 매칭된 값이 기억된다.

 

8 (?:x)
  • x에 일치하지만 일치한 것을 기억하지 않는다. 비포획 괄호.
  • 괄호안의 문자가 반복되는 것을 매칭하고 싶을 때 사용

 

9 x(?=y)
  • y가 뒤따라오는 x에만 매칭된다. lookahead
  • /foo(?=bar)/는 "foobar"의 "foo"에 매칭된다.

 

10 x(?!y)
  • y가 뒤따라 오지 않는 x에만 매칭된다. negated l ookahead.
  • /\d+(?!.)/는 "3.141"의 "141"에 매칭된다.

 

11 x|y
  • x 또는 y에 매칭된다.

 

12 {n}
  • 앞에 오는 문자가 n번 나타날 경우 매칭된다.

 

13 {n, m}
  • 앞에 오는 문자가 n ~ m번 나타날 경우 매칭된다.

 

14 [xyz]
  • 문자셋(Character set)을 말한다.

  • 점(.)이나 별표(*)와 같은 특수 문자는 문자셋에서는 단순 문자로 인식된다.

  • 하이픈(-)을 이용하여 문자의 범위를 지정 할 수 있다.

  • /[a-d]/는 "brisket"의 'b'와 매칭된다.

  • /[a-z.]+/는 "test.i.ng"의 문자열 전체, "test.i.ng"과 매칭된다.

    • []안에 a-z를 만족하는 문자이거나 .인 경우에서 +로 인하여 1번 이상 반복하는 문자열에 매칭되므로

 

15 [ ^xyz]
  • 음의 문자셋(negated character set) 또는 보수 문자셋(complemented character set)을 말한다.
  • [안에 있지 않은 문자열과 매칭된다.]

 

16 [\b]
  • 백스페이스와 매칭된다.
  • 백스페이스 문자에 일치 시키려면 대괄호를 이용해야 한다.

 

17 \b
  • 단어의 경계를 말한다.
  • /\bm/은 "moon"의 m과 매칭된다.
  • /oo\b/는 "moon"과 매칭되지 않는다. (문자열의 끝이 o가 아니기 때문에)
  • /n\b/는 "moon"의 n과 매칭된다.
  • 단어의 앞과 뒤라고 생각하면 된다.

 

18 \B
  • 단어의 경계가 아닌 곳을 의미한다.

  • /\B../은 "moon"의 "oo"와 매칭된다.

    • 경계가 아닌 m과 .이 단일문자를 의미하는데 두개 있으므로

 

19 \d
  • 숫자와 매칭된다.
  • [0-9]와 동일하다.

 

20 \D
  • 숫자가 아닌 문자와 매칭된다.
  • [^0-9]와 동일하다.

 

21 \n
  • 줄 바꿈 문자에 매칭된다.

 

22 \r
  • 캐리지 리턴 문자에 대응된다.
  • \n 가 새줄을 만들어 주는 것이면, \r은 새로운 줄로 커서를 옮기는 것이다.

 

22 \s
  • 스페이스, 탭, 폼피드, 줄 바꿈 문자등을 포함한 하나의 공백 문자에 매칭된다.
  • [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]와 동일하다.
  • /\s\w*/는 "foo bar."의 ' bar'에 매칭된다.

 

23 \S
  • 공백 문자가 아닌 하나의 문자에 매칭된다.
  • [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. 와 동일하다.
  • /\S\w*/는 "foo bar."의 'foo' 에 매칭된다.

 

24 \t
  • 탭 문자에 매칭된다.

 

25 \w
  • 밑줄 문자를 포함한 영숫자 문자에 매칭된다.
  • [A-Za-z0-9_] 와 동일하다.
  • /\w/는 "apple,"의 'a' 에 대응되고, "$5.28,"의 '5'에 대응되고,"3D."의 '3'에 대응된다.

 

26 \W
  • 단어 문자가 아닌 문자에 매칭된다.

 

27 \n (개행과 다름, n은 양의 정수)
  • 정규식 안 n번 괄호의 최근 일치 부분의 역참조 이다.

  • /(foo) (bar) \1 \2/은 "foo bar foo bar"에 "foo bar foo bar"이 매칭된다.

    • \n 패턴은 괄호로 기억된 값을 참조하고 있다.
  • \1은 첫번째 괄호로 매칭된 foo 값을 나타내고, \2는 두번째 괄호로 매칭된 bar를 나타낸다.

  • /(foo) (bar) \1 \2/ 패턴은 /(foo) (bar) foo bar/ 패턴과 동일하다.

 

28 \0
  • Null 문자와 매칭된다.

 

정규표현식 사용하기

RegExp와 String에 정의되어 있는 메소드를 사용하여 정규표현식을 사용할 수 있다.

 

RegExp 메소드

exec

  • 매칭된 문자열이 있다면 매칭된 값의 배열을 리턴하고, 없다면 null을 리턴한다.

test

  • 매칭된 문자열이 있으면 true를 리턴하고, 없다면 false를 리턴한다.

 

String 메소드

match

  • 매칭된 문자열이 있다면 매칭된 값의 배열을 리턴하고, 없다면 null을 리턴한다.

search

  • 매칭된 문자열이 있다면 매칭된 문자열의 인덱스를 리턴하고, 매칭된 문자열이 없다면 -1를 리턴한다.

Replace

  • 매칭된 문자열을 찾아 매칭된 문자열을 변경한다.

split

  • 매칭된 문자열을 찾아 그 문자열을 기준으로 문자열을 나눈다.

 

정규식 플래그

  • 정규식뒤에 이어서 쓰면 된다. Ex) /abc/g
  • 생성자 생성시 인자로 넘겨줌으로써 설정 할 수 도 있다.
  • 정규식을 처음 정의할 때, 설정해야 한다.
  • 그 이후에 플래그를 추가하거나 삭제할 수 없다.
  • 플래그를 중첩해서 사용가능하다. Ex) /abc/gi

g

  • 전역검색.
  • 매칭되는 모든 문자열을 가져올 수 있다.

 

i

  • 대소문자 구별 없이 검색

 

m

  • Multi-line 검색. 시작 혹은 끝 문자 탐색(^ and $)이 다중행에 적용되도록 한다.

 

y

  • 검색 위치 조정가능

 


참고사이트

https://beomy.tistory.com/21

mdn 정규표현식

 

'Javascript' 카테고리의 다른 글

[Javascript] Canvas API  (0) 2019.08.02
[Javascript] Call Stack, Event Loop, Event Queue 동작원리  (0) 2019.07.31
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함