본문 바로가기

JavaScript

[JavaScript] 정규 표현식(Regular expressions)

반응형

정규 표현식이란

정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다. 

참고💡

  • JavaScript에서는 정규 표현식도 객체로서, RegExp 객체의 exec()와 test() 메서드를 사용할 수 있습니다.
  • String의 match(), matchAll(), replace(), replaceAll(), search(), split() 메서드와도 함께 사용할 수 있습니다.

 

정규 표현식 생성하기

정규 표현식은 두 가지 방법으로 만들 수 있습니다.

1. 정규 표현식 리터럴

const re = /ab+c/;

2. RegExp 객체의 생성자 호출

const re = new RegExp("ab+c");

 

정규 표현식 패턴 작성하기

문자 클래스(Character classes)

문자와 숫자처럼 다른 유형의 문자를 구분합니다.

Characters Meaning Example
\d 모든 숫자(아라비아 숫자)와 일치합니다. [0-9]와 같습니다. /\d/ 또는 /[0-9]/ 는 "B2 is suite number"의 "2"와 일치합니다.
\D 숫자(아라비아 숫자)가 아닌 모든 문자와 일치합니다. [^0-9]와 같습니다. /\D/ 또는 /[^0-9]/는 "B2 is suite number"의 "B"와 일치합니다.
\w 밑줄(_)을 포함한 기본 라틴 문자의 모든 영숫자와 일치합니다. [A-Za-z0-9_]와 같습니다. /\w/는"apple"의 "a", "$5.28"의 "5", "3D"의 "3", "Emanuel"의 "m"과 일치합니다.
\W 기본 라틴 문자에서 단어 문자가 아닌 모든 문자를 일치합니다. [^A-Za-z0-9__]와 같습니다. /\W/ 또는 /[^A-Za-z0-9_]/는 "50%"에서 "%"와 "Émanuel"에서 "É"와 일치합니다.
\s 공백, 탭, 폼 피드, 라인 피드 및 기타 유니코드 스페이스를 포함한 단일 공백 문자와 일치합니다. [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]와 같습니다. /\s\w*/는 "foo bar"의 "bar"와 일치합니다.
\S 공백 이외의 단일 문자와 일치합니다. [^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]와 같습니다. /\S\w*/ "foo bar"에서 "foo"와 일치합니다.
\t 가로 탭과 일치합니다.  
\r 캐리지 리턴과 일치합니다.  
\n 줄 바꿈과 일치합니다.  
\v 세로 탭과 일치합니다.  
\f 폼피드와 일치합니다.  

 

어서션(Assertions)

Characters Meaning Example
^ 입력의 처음과 일치합니다. /^A/는 "an A"의 "A"와 일치하지 않지만 "An A"의 첫 번째 "A"와 일치합니다.
$ 입력의 끝과 일치합니다. /t$/는 "eater"의 "t"와 일치하지 않지만 "eat"에서는 일치합니다.

 

그룹(Groups)

  Characters Meaning Example
Capturing group (x) x와 일치하고 일치를 기억합니다. /(foo)/ "foo"를 매치하고 "foo bar"에서 "foo"를 기억합니다.
Named capturing group (?<Name>x) "x"와 일치하고 이를 <Name>에서 지정한 이름으로 반환된 일치 항목의 그룹 속성에 저장합니다. 그룹 이름에는 꺾쇠 괄호(< 및 >)가 필요합니다. 전화 번호에서 미국 지역 번호를 추출하기 위해 /\((?<area>\d\d\d)\)/를 사용할 수 있습니다. 결과 번호는 matchs.groups.area 아래에 표시됩니다.
Non-capturing group (?:x) "x"와 일치하지만 일치 항목을 기억하지 않습니다. 일치하는 부분 문자열은 결과 배열의 요소([1], …, [n]) 또는 미리 정의된 RegExp 개체의 속성($1, …, $9)에서 불러올 수 없습니다.  

 

기타 기능

이러한 기능은 패턴 자체를 지정하지 않고 패턴을 구성하는 데 사용됩니다.

  Characters Meaning Example
Disjunction | | 연산자는 두 개 이상의 대안을 분리합니다. 패턴은 먼저 첫 번째 대안과 일치하려고 시도하고, 실패하면 두 번째 대안과 일치하려고 시도합니다.

| 연산자는 정규식에서 가장 낮은 우선 순위를 갖습니다. 더 큰 패턴의 일부로 분할을 사용하려면 그룹화해야 합니다.
/a|ab/는 "abc"의 "a"와 일치합니다.
(첫 번째 대안이 이미 성공적으로 일치하기 때문에 다음은 "ab" 대신 "a"와 일치합니다)

/a|ab/.exec("abc"); // ['a']

 

정규 표현식 테스트 사이트

 

Reference

 

 

 

 

반응형