프로그래밍 노트/JAVASCRIPT

[Javascript] 정규 표현식 살펴보기(정규식_2)

깡냉쓰 2019. 1. 21. 20:21
728x90
반응형

정규 표현식 살펴보기

1. 정규 표현식에 대한 설명

정규 표현식 => 텍스트내에서 일치하는 문자열을 찾기 위해 문자열의 패턴을 표현하는 방식

정규 표현식은 이런 패턴을 정의할 수 있도록 용어(terms)연산(operators)로 구성된다.

 

정규 표현식을 생성하는 방법

  1. 정규 표현식 리터럴을 이용하는 방법
  2. RegExp 객체의 인스턴스를 생성하는 방법
var pattern = /test/;
var pattern = new RegExp("test");

보통 개발시점에 어떤 정규식을 이용할지 알고 있는 경우에는 정규 표현식 리터럴을 사용하고, 실행 중에 문자열을 이용해서 동적 으로 정규 표현식을 생성해야 할 때는 생성자(RegExp)를 이용한다.

 

정규 표현식과 함께 사용할 수 있는 플래그

  • i - 대소문자를 구별하지 않도록한다. /test/i 는 "test"뿐 아니라, "Test", "TEST", "tEsT"와도 매치
  • g - 맨 처음 나타나는 부분 한 번만 매치시키는 것이 아니라, 지정된 패턴에 해당하는 모든 부분을 매치시킨다.
  • m - 여러 줄을 포함하고 있는 문자열(textarea)같이 구성된 문자열을 대상으로 매치할수 있게 해준다.

이 플래그들은 정규 표현식 리터럴 끝(/test/ig) 에 추가하거나, RegExp 생성자의 두 번째 매개변수(new RegExp("test", "ig"))로 넘겨 사용할 수 있다.

 

2. 용어(Terms)와 연산자

정확히 같은 부분 매칭하기

  • /test/에는 용어(term)가 네 개 존재하는데, 이 패턴에 매치되는 문자열은 문자열 내에 해당하는 문자들이 그대로 포함되어 있어야한다. (t 다음에는 e 다음에는 s 다음에는 t가 와야한다.)

문자 클래스를 이용해서 매칭하기

  • 문자 클래스 연산자로도 불리는 집합 연산자를 이용해서 문자의 집합을 지정할 수 있는데, 대괄호 사이에 매치시키려는 문자들의 집합을 지정하는 방식을 이용 ex) [abc] 3개 중 하나를 매치하고자함을 의미
  • [^abc] 와 같이 대괄호 다음에 캐럿(^) 문자를 놓으면 문자 집합에 포함되지 않은 모든 문자를 의미
  • [abcdefghijklm] 이것은 [a-m]으로 간단하게 표현이 가능하다. 대시(-)는 사전순으로 "a"부터 "m" 까지를 의미

시작과 끝

  • /^test/ 문자열의 처음에 test가 오는 경우만 매치
  • /test$/ 문자열의 끝에 test가 오는 경우만 매치
  • /^test$/ 지정된 패턴이 비교대상 문자열 전체와 일치해야 함을 나타냄

반복된 출현

  • /t?est/ 는 "test" 와 "est"을 매치한다. ?는 한 번만 나타나거나 단 한번도 나타나지 않은 경우를 지정한다.
  • /t+est/ 는 "test", "ttest", "tttest"와 매치한다. +는 한 번 이상 나타나는 것을 지정한다.
  • /t*est/ 는 "test", "ttest", "tttest", "est"와 매치한다. *는 0번 이상 타나는 것을 지정한다.
  • /a{4}/ 는 "a"가 연속 4번 나오는 것을 나타낸다. { }사이에 반복 횟수를 지정하면 정해진 횟수만큼 반복되는 경우를 나타낼 수 있다.
  • /a{4,10}/ 는 "a가" 4~10번 연속으로 나오는 것과 매치한다. 콤마(,)를 사용해 범위를 지정할 수 있다.
  • /a{4,}/ 는 "a"가 연속으로 4번 이상 나오는 모든 문자열과 매치된다.

미리 정의된 문자 클래스

정규 표현식 문법은 문자 집합을 나타내거나 일반적으로 사용되는 문자 클래스들을 미리 정의한 용어(term) 형태로 제공하고 있다.

미리 정의된 용어대상
.줄바꿈 문자(\n)를 제외한 모든 문자
\d0-9 사이의 10진수 숫자. [0-9]와 같다
\w_를 포함한 모든 영어 알파벳과 숫자.[A-Za-z0-9__]와 같다.
\s공백문자(공백, 탭, 폼피드 등)

그룹화

  • 용어(terms)로 이뤄진 그룹에 연산자를 적용하고자 한다면, 다음과 같은 괄호를 이용할 수 있다.
  • /(ab)+/ 는 "ab"가 1번 이상 타나는 것과 매치된다.
  • 괄호를 이용해서 그룹으로 묶여 있는 경우, 그룹화 외에도 캡처를 생성하는 역할을 하게 된다.

선택(OR)

  • 선택은 | 문자를 이용해서 표현할 수 있다.
  • /a|b/ 는 "a"나 "b"에 매치가 된다.
  • /(ab)+|(cd)+/는 "ab" 또는 "cd"가 1번 이상 나타나는 것에 매치가 된다.

역참조

  • 정규 표현식 내에 정의된 캡처를 나중에 사용하는 방법
  • 역참조는 역슬래시 뒤에 참조할 캡처 번호를 쓰는 방법으로 표현하는데 번호는 1부터 시작하고 \1, \2 등이 된다.
  • /^([dtn])a \1/ 이것은 /[dtn]a[dtn]/과 같지 않다. "a"뒤에 오는 문자는 "d", "t", "n"중에 아무거나 오면 되는 것이 아니라 반드시 매치가 시작된 첫 번째 문자가 와야 한다.


728x90
반응형