Regular Expression

홍성표·2022년 6월 7일
0

정규 표현식 (Regular Expression)

  • 정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴이다.
  • JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec()와 test() 메서드를 사용할 수 있다.
  • String의 match(), matchAll(), replace(), replaceAll(),search(), split() 메서드와도 함께 사용할 수 있다.

정규 표현식 만들기

  • 정규 표현식 리터럴. 다음과 같이 슬래시로 패턴을 감싸서 작성한다.
  • 정규 표현식 리터럴은 스크립트를 불러올 때 컴파일되므로, 바뀔 일이 없는 패턴의 경우 리터럴을 사용하면 성능이 향상될 수 있다.
const re = /ab+c/
  • RegExp 객체의 생성자 호출.
const re = new RegExp('ab+c')

정규 표현식 패턴 작성하기

  • 정규 표현식 패턴은 /abc/처럼 단순한 문자로 구성하거나, /ab+c/와 /Chapter (\d+).\d*/처럼 단순한 문자와 특수 문자의 조합으로 구성할 수도 있다.
  • 특히 (\d+)에 나타난 괄호는 정규 표현식에서 기억 장치처럼 쓰여서, 괄호의 안쪽 패턴과 일치한 부분을 나중에 사용할 수 있도록 기억한다.

단순 패턴 사용하기

  • 단순 패턴은 문자열을 있는 그대로 탐색할 때 사용한다.
  • 예를 들어, /abc/ 패턴은 문자열에서 정확한 순서로 "abc"라는 문자의 조합이 나타나는 부분과 일치한다.
  • 그러므로 이 패턴은 "Hi, do you know your abc's?"와 "The latest airplane designs evolved from slabcraft." 두 문자열에서 일치에 성공하고, 일치하는 부분은 "abc"일 것이다.
  • 반면 "Grab crab"에서는 일치하지 않는데, 이 문자열은 부분 문자열로 "ab c"를 포함하긴 하지만, 정확하게 "abc"를 포함하지는 않기 때문이다.

특수 문자 사용하기

  • 하나 이상의 "b"를 찾는다거나 공백 문자를 찾는 등 직접적인 일치 이상의 탐색이 필요할 땐 특수 문자를 사용한다.
  • 예컨대 "하나의 "a" 이후에 0개 이상의 "b", 그 뒤의 "c""와 일치해야 하면 /ab*c/ 패턴을 사용할 수 있다.
  • "b" 뒤의 *는 "이전 항목의 0번 이상 반복"을 의미한다.
  • 이 패턴을 문자열 "cbbabbbbcdebc"에 대해 사용하면, 일치하는 부분 문자열은 "abbbbc"일 것이다.

정규 표현식 특수 문자

\, ., \cX, \d, \D, \f, \n, \r, \s, \S, \t, \v, \w, \W, \0, \xhh, \uhhhh, \uhhhhh, [\b]
^, $, x(?=y), x(?!y), (?<=y)x, (?<!y)x, \b, \B
(x), (?:x), (?<Name>x), x|y, [xyz], [^xyz], \Number
*, +, ?, x{n}, x{n,}, x{n,m}
\p{UnicodeProperty}, \P{UnicodeProperty}

JavaScript에서 정규 표현식 사용하기

  • exec() : 문자열에서 일치하는 부분을 탐색한다. 일치 정보를 나타내는 배열, 또는 일치가 없는 경우 null을 반환한다.
  • test() : 문자열에 일치하는 부분이 있는지 확인한다. true 또는 false를 반환한다.
  • match() : 캡처 그룹을 포함해서 모든 일치를 담은 배열을 반환한다. 일치가 없으면 null을 반환한다.
  • matchAll() : 캡처 그룹을 포함해서 모든 일치를 담은 반복기를 반환한다.
  • search() : 문자열에서 일치하는 부분을 탐색한다. 일치하는 부분의 인덱스, 또는 일치가 없는 경우 -1을 반환한다.
  • replace() : 문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 바꾼다.
  • replaceAll() : 문자열에서 일치하는 부분을 모두 탐색하고, 모두 대체 문자열로 바꾼다.
  • split() : 정규 표현식 또는 문자열 리터럴을 사용해서 문자열을 부분 문자열의 배열로 나눈다.
profile
안녕하세요. 홍성표입니다.

0개의 댓글