티스토리 뷰

JAVASCRIPT

[Javascript] 정규표현식

jeongah story 2020. 5. 10. 18:03

[모던자바스크립트] 12.1 정규 표현식의 기본

 

정규 표현식 :  문자열의 패턴을 표현하기 위한 도구

 

자바스크립트의 정규표현식은 Perl의 정규 표현식을 받아들인 것이며, ECMAScript3 부터 표준이 되어있습니다.

Perl, Java, JavaScript, PHP, Python, Ruby 등의 프로그램 언어에 내장되어 있으며, Emacs,vi를 비롯한 많은 텍스트 편집기에도 내장되어있습니다. 

 

 

12.1.2 정규 표현식의 생성

 

정규식을 만드는 방법에는 두 가지가 있습니다.

 

1. RegExp객체의 생성자 함수를 호출하는 방법도 있습니다:

var re = new RegExp("ab+c");
정규식의 패턴이 변경될 수 있는 경우, 혹은 사용자 입력과 같이 다른 출처로부터 패턴을 가져와야 하는 경우에는 생성자 함수를 사용하세요.

 

2. 정규 표현식 리터럴(슬래쉬"/"로 감싸는 패턴)을 사용하는 방법은 다음과 같습니다.

var re = /ab+c/;

 

정규 표현식 패턴을 작성할 때는 숫자(0~9)와 알파벳(a~z, A~Z) 등의 일반문자와 '+'  , ' . '등의 특수문자(메타문자)를 사용합니다.

메타문자를 문자로서 사용할때는 ' \+ '처럼 메타 문자 앞에 \ 문자를 붙여주어야 합니다.

 

 

12.1.4 RegExp 객체의 메서드

 

See the Pen [javascript] 정규 표현식 by jeongahlee (@jeongahlee) on CodePen.

 

 

12.2 기본적인 정규 표현식 패턴 작성하기.

 

간단한 정도의 패턴이라면 굳이 정규 표현식을 사용하지 않아도 

String, prototype의 indexOf메서드로 처리할 수 있습니다.

정규 표현식의 핵심은 메타 문자를 사용한 문자열 패턴의 표현입니다.

정규 표현식에는 다양한 메타 문자가 정의되어 있으며, 이를 활용하여 다양한 유형의 문자열 패턴을 표현할 수 있습니다.

 

 

12.2.1 리터럴 문자

 

정규표현식 리터럴 문자

리터럴 문자 설명
유니코드 문자 문자 그 자체를 뜻한다. 단, ^, $, \, ., *,  +, ?, (. ), [, ],  {, }, | 는 제외한다.
^ 줄(Line)의 시작에서 일치, /^abc/
$ 줄(Line)의 끝에서 일치, /xyz$/
. 임의의 한 문자와 일치
a|b a 또는 b와 일치, 인덱스가 작은 것을 우선 반환
* 0회 이상 연속으로 반복되는 문자와 가능한 많이 일치, {0,}와 동일
*? 0회 이상 연속으로 반복되는 문자와 가능한 적게 일치(lazy), {0}와 동일
+ 1회 이상 연속으로 반복되는 문자에 가능한 많이 일치, {1,}와 동일
+? 1회 이상 연속으로 반복되는 문자에 가능한 적게 일치(lazy), {1}와 동일
? 없거나 1회 가능한 많이 일치
?? 없거나 1회 가능한 적게 일치(lazy)
{3} 3(숫자)개 연속 일치
{3,} 3개 이상 연속 일치
{3,5} 3개 이상 5개 이하(3~5개) 연속 일치
{3,5}? 3개 이상 5개 이하(3~5개) 연속 중 가능한 적은 3개 연속 일치(lazy), {3}와 동일
() 캡처(Capture)할 그룹
(?<>) 캡처 그룹 이름 지정, /(?<name>pattern)/ ES2018
\1~9 정규식 내 캡처된 값 참조, /(abc)\1/
(?:) 캡처(Capture)하지 않는 그룹
(?=) 앞쪽 일치(Lookahead), /ab(?=c)/
(?!) 부정 앞쪽 일치(Negative Lookahead), /ab(?!c)/
(?<=) 뒤쪽 일치(Lookbehind), /(?<=ab)c/ ES2018
(?<!) 부정 뒤쪽 일치(Negative Lookbehind), /(?<!ab)c/ ES2018
[abc] a 또는 b 또는 c와 일치, 점(.)이나 별표(*) 같은 특수 문자는 []안에서 특수 문자가 아님, /\.[.]/
[a-z] a부터 z 사이의 문자 구간에 일치(영어 소문자)
[A-Z] A부터 Z 사이의 문자 구간에 일치(영어 대문자)
[0-9] 0부터 9 사이의 문자 구간에 일치(숫자)
[가-힣] 가부터 힣 사이의 문자 구간에 일치(한글)
[2-7] 2부터 7 사이의 문자 구간에 일치(2,3,4,5,6,7)
[b-f] b부터 f 사이의 문자 구간에 일치(b,c,d,e,f)
[다-바] 다부터 바 사이의 문자 구간에 일치(다,라,마,바)
[^abc] a 또는 b 또는 c가 아닌 나머지 문자에 일치(부정)
\ 이스케이프 문자, /\.\?\/\$\^/
\b 63개 문자(영문 대소문자 52개 + 숫자 10개 + _(underscore))가 아닌 나머지 문자에 일치하는 경계(boundary)
\B 63개 문자에 일치하는 경계
\d 숫자(Digit)에 일치
\D 숫자가 아닌 문자에 일치
\p{} 유니코드 속성(Property) 집합에 맞는 문자에 일치, /\p{Emoji}/u ES2018
\P{} 유니코드 속성 집합에 맞지 않는 문자에 일치, /\p{Uppercase}/u ES2018
\s 공백(Space, Tab 등)에 일치
\S 공백이 아닌 문자에 일치
\w 63개 문자(Word, 영문 대소문자 52개 + 숫자 10개 + _)에 일치
\W 63개 문자가 아닌 나머지 문자에 일치
\x 16진수 문자에 일치, /\x61/a에 일치
\0 NULL문자 (\u000) 8진수 문자에 일치, /\141/a에 일치
\u 유니코드(Unicode) 문자에 일치, /\u0061/a에 일치
\c 제어(Control) 문자에 일치
\f 폼 피드(FF, U+000C) 문자에 일치, 다음 페이지 문자(FF=\u000C)
\n 줄 바꿈(LF, U+000A) 문자에 일치, 개행문자(LF=\u000A)
\r 캐리지 리턴(CR, U+000D) 문자에 일치, (CR=\u000D)
\v 수직 탭 문자(\u000B)
\t 탭 (U+0009) 문자에 일치(\u0009)
\xhh 16진수 hh로 지정된 ASCII문자 
\uhhhh 16진수 hhhh로 지정된 유니코드 문자\
\cX 제어 문자
$` 문자 대체(replace) 시 일치한 문자 이전 값 참조
$' 문자 대체(replace) 시 일치한 문자 이후 값 참조
$+ 문자 대체(replace) 시 마지막으로 캡처된 값 참조
$& 문자 대체(replace) 시 일치한 문자 결과 전체 참조
$_ 문자 대체(replace) 시 입력(input)된 문자 전체 참조
$1~9 문자 대체(replace) 시 캡처(Capture)된 값 참조

 

 

12.2.2 문자 클래스

 

 

See the Pen [javascript] 정규표현식2 by jeongahlee (@jeongahlee) on CodePen.

정규표현식 참고 사이트

https://regexr.com/

https://regexper.com/
 

 

 

Regexper

 

regexper.com

 

댓글
© 2018 eh2world