정규표현식

김지원·2021년 6월 22일
0
post-thumbnail

1. 정규표현식?!?

1. 정규표현식이란?

문자열에 나타나는 특정 문자 조합과 대응시키기 위해 사용되는 패턴으로

자바스크립트에서는 정규표현식도 객체로 나타냅니다.

복잡해질 수 있는 조건문 혹은 반복문을 정규표현식을 이용해 간단히 표현할 수 있습니다.

but 가독성이 떨어져 정규표현식을 모른다면 뜻을 이해하기 힘듭니다.

2. 정규표현식을 사용하는 메서드

정규표현식은 RegExp의 exec 메서드와 test 메서드

String의 match메서드 replace메서드 search메서드 split메서드에서 주로 사용하는 패턴입니다!

3. 정규표현식을 만드는 방법

let str = /^x/; //첫번째 방법

let str = new RegExp("xxx");  //두번째 방법

첫번째 방법으로는 / 로 감싸는 패턴이 있고

두번째 방법으로는 RegExp 객체의 생성자 함수를 호출하는 방법이 있습니다

첫번째 방법 ( / / )두번째 방법 (생성자 함수 호출)
스크립트가 불러와질때 컴파일실행 시점에 컴파일
스크립트를 바로 불러오는 경우다른 출처에서 패턴을 가져오는 경우
정규식이 상수라면 성능이 향상패턴이 변경될 수 있는 경우

2. 정규표현식에서 사용되는 문자들

1.특수 문자들

정규표현식설명간단히 표현
^x문자열의 시작을 표현하고 ^x는 문자열이 x로 시작함을 의미한다.
x$문자열의 종료를 표현하고 x$는 문자열이 x로 끝난다를 의미한다.
.x임의의 한 문자의 자리수를 표현하며 문자열이 x로 끝난다를 의미한다.
ex) ax, ox는 대응되지만 xo에는 대응되지 않는다.
x+x가 1번 이상 반복한다.
x?x의 존재 여부를 확인한다.
x*x의 반복 여부를 확인한다.
x|yor을 표현한다. x혹은 y가 존재하는지를 의미한다.
(x)그룹을 표현하고 x를 그룹으로 처리한다.
(x)(y)그룹들의 집합을 표현한다.
앞에서부터 순서대로 번호를 부여하여 관리한다.
그룹화된 데이터들은 배열 형식으로 관리된다.

(x)(?:y)그룹들의 집합에서 예외를 표현한다.
그룹 집합으로 관리되지 않음을 뜻한다.
x{n}x문자가 n번 반복한 문자를 찾는다.
x{n,}x를 n번 이상 반복한 문자를 찾는다.
x{n,m}x를 n번이상 m번 이하 반복한 문자를 찾는다.

2. 대괄호로 되어 있는 문자들

정규표현식설명간단한 표현
[xy]xy중에 하나를 찾는다.
[^xy]xy를 제외하고 문자 하나를 찾는다.
[x-z]x~z 사이의 문자 중 하나를 찾는다.

3. \로 되어 있는 문자들

정규표현식설명간단한 표현
[\b]백스페이스와 대응된다. \b와 혼동 🚫
\b단어 경계에 대응
문자와 공백사이의 문자를 찾는다.
사용시 앞의 문자 \b(str) 뒤의 문자 (str)\b
\B문자와 공백 사이가 아닌 값을 찾는다.
\d숫자 문자에 대응한다. [0-9]와 동일
\D숫자 문자가 아닌 것에 대응 [^0-9]와 동일
\n줄바꿈 문자에 대응한다.
\s스페이스,탭,줄바꿈 등의 하나의 공백 문자에 대응한다.
\S공백 문자가 아닌 하나의 문자에 대응한다.
\t탭 문자에 대응한다.
\v수직 탭 문자에 대응한다.
\w밑줄(_)를 포함한 영숫자 문자에 대응한다.
\W단어 문자가 아닌 문자에 대응한다.
\0널 문자에 대응한다. 🚫뒤에 다른 숫자 쓰는거 금지!
\n정규식 내부의 n번째 괄호에서 대응한 부분의 역참조

예제

let str = 'he is angry';

let str2 = str.replace(/\bh/, 'sh');
console.log(str2);  			 //result: she is angry
str2 =str.replace(/y\b/, 'abc');
console.log(str2);              //result: he is angrabc

4. flag

Flag설명
gGlobal-- 문자열 내의 모든 패턴을 찾는다
iIgnore Case -- 문자열의 대소문자를 구별 X
mMulti Line -- 문자열에서 행이 바뀌어도 찾는다.

flag는 정규표현식의 마지막 /의 뒤에 사용합니다.


3. 간단한 예제

const str = "나는 1이야 너는 2?";

console.log(str.split(/[0-9]/g));

//result
//[ '나는 ', '이야 너는 ', '?' ]

/0-9]/g를 사용하면 전체에서 0~9사이의 숫자를 찾습니다.

const str = "I am ironman";

console.log(str.split(/[i]/gi));

//result
//[ '', ' am ', 'ronman' ]

i를 대소문자 상관없이 찾는 것을 볼 수 있습니다.

나머지 예제는 사용하면서 하나하나씩 추가해나가겠습니다!


참고자료

profile
backend-developer

0개의 댓글