[Day 49] Regular Expression
정규표현식
문자의 패턴을 표현하는 언어
정규 표현식 만들기
-
정규식 리터럴
// 생성자 방식에 비해 성능상 더 좋다! // 컴파일이 한번만 된다. const re1 = /abc+/
-
RegExp 생성자
// 컴파일이 여러번 된다. // 정규식을 동적으로 생성해야할 때에만 쓴다. (서버로 받은 데이터로부터 정규식을 생성하거나 할 때...) const re2 = new RegExp('abc+')
정규 표현식 사용하기
문자열 래퍼 객체(String)의 match
, search
, split
, replace
메소드가 정규식을 입력받아서 사용할 수 있다.
// Example
"Hi, do you know your abc's?".match(/abc/);
// indexOf('string')과 유사하지만 정규표현식을 지원한다는 장점이 있다.
"Hi, do you know your abc's?".search(/abc/);
"Hi, do you know your abc's?".split(/abc/);
"Hi, do you know your abc's?".replace(/abc/, 'ABC');
// * 는 앞에 있는 b가 없거나, 한 번 이상 등장하는 패턴(b가 0회 이상 등장하는 패턴)
"1234 abbbbbc 1234".match(/ab*c/);
// match는 정규식 패턴과 일치하는 것을 찾으면 배열을 리턴, 못찾으면 null 리턴
"1234 abbbbbc 1234".search(/ab*c/);
"1234 abbbbbc 1234".split(/ab*c/);
"1234 abbbbbc 1234".replace(/ab*c/, '{$&}');
정규 표현식 객체의 메소드
// re3는 정규 표현식 객체이다.
const re3 = /ab*c/
// exec 메소드는 String의 match 메소드와 비슷하다.
re3.exec("1234 abbbbbc 1234");
// 패턴이 있는지를 검사해서 있으면 true, 없으면 false 리턴
re3.test("1234 abbbbbc 1234");
특수문자 사용하기
일부 특수문자들은 정규표현식 안에서 사용되었을 때 특별한 의미를 갖는다.
-
특수문자 앞에 위치한 백슬래시(
\
) : 특수 문자의 의미를 없앤다.특수문자가 아닌 문자 앞에 위치한 백슬래시는 특별한 기능을 갖는다.
-
^
: 입력의 시작 부분에 대응된다. -
$
: 입력의 끝 부분과 대응된다. -
*
: 앞의 표현식이 0회 이상 반복되는 부분과 대응된다. -
+
: 앞의 표현식이 1회 이상 반복되는 부분과 대응된다. -
?
: 앞의 표현식이 0 또는 1회 등장하는 부분과 대응된다. (나오거나 안나오거나)?
를 수량자(*
,+
) 바로 뒤에 사용하면 가능한 적게 대응시키도록 만든다. -
.
: 개행 문자를 제외한 모든 단일 문자와 대응된다. (숫자, 특수문자 포함)즉,
.
은 하나의 문자로 인정받는다. -
(x)
: 포획 괄호 —> 부분 표현식 ‘x’ 를 하나의 단위로 취급한다. 그리고 그것을 기억한다. -
(?:x)
: 비포획괄호 —> 포획 괄호에서 기억하는 기능이 빠진다. -
x|y
: ‘x’ 또는 ‘y’에 대응된다. -
{n}
: 앞 표현식이 정확히 n번(n은 양수) 나타나는 부분에 대응된다. (수량자) -
{n, m}
: n <= m 을 만족할 때, 앞 문자가 최소 n개 최대 m개 나타나는 부분에 대응된다. -
[xyz]
: 문자셋. —> 괄호 안의 어떤 문자(이스케이프 시퀀스\
포함)와도 대응된다..
이나*
같은 특수문자들은 문자셋 안에서 특별한 의미가 없는 단순 문자로 작동한다.-
은 문자의 범위를 지정해주는 특별한 의미를 갖는다. -
[^xyz]
: 부정 문자셋. —> 괄호 내부에 등장하지 않는 어떤 문자와도 대응된다. -
\b
: 다른 단어 문자가 앞이나 뒤에 등장하지 않는 위치인 단어 경계에 대응된다.공백과도 일치하고, 문자열의 처음과 끝과도 일치한다.
-
\d
: 숫자 문자에 대응된다. —> [0-9] 와 같은 의미. (d는 digit의 약자) -
\n
: 줄 바꿈 문자에 대응된다. (line-feed) -
\r
: 캐리지 리턴 문자에 대응 된다. (carriage-return) -
\s
: 스페이스, 탭, 폼 피드, 줄 바꿈 문자 등을 포함한 하나의 공백 문자에 대응된다. -
\w
: 밑줄 문자를 포함한 영 숫자 문자에 대응된다. —> [A-Za-Z0-9_]와 동일하다.
플래그를 이용한 고급 검색
g
- 전역 검색i
- 대소문자 구분 없는 검색m
- 다중행(multi-line) 검색u
- 유니코드. —> 패턴을 유니코드 코드 포인트의 나열로 취급한다.
댓글남기기