Enjoy Programming

Regular Expression - 정규표현식 본문

JavaScript/Vanilla Js

Regular Expression - 정규표현식

LEETAEEON 2021. 5. 9. 15:26

정규표현식이란 문자열을 검색하고 대체하는 데 사용 가능한 일종의 형식 언어(패턴)이다.

간단한 문자 검색부터 이메일, 패스워드 검사 등의 복잡한 문자 일치 기능 등을 정규식 패턴으로 빠르게 수행할 수 있다.

단 정규식 패턴이 수행 내용과 매치가 잘 안되어 가독성이 많이 떨어지기에 공부하는데 어렵다.

 

기초 개념을 잘 다져보자.

 

정규표현식은 크게 세가지 역할을 수행한다

문자 검색, 문자 대체, 문자 추출

 

자바스크립트 정규식 생성

 

정규표현식은 객체로 취급되기 때문에 생성자 함수 또는 리터럴로 정의한다.

1.생성자 함수 방식

RegExp - 생성자 함수를 호출하여 사용할 수 있다.

const reg = new RegExp("^abc", "gi");

new RegExp(표현식, 플래그)

 

2.리터럴 방식

" / " 로 감싸진 페턴을 리터럴로 사용한다.

const reg = /^abc/gi;

보통은 리터럴이 훨씬 편리하다. 하지만 상황에따라 생성자 함수를 써야만 하는 경우도 있다.

 

3.재할당(re-compile)

const가 아닌 let으로 변수 선언을 하면 사용중인 정규식을 재할당 할 수 있다.

 

** 단순 패턴 사용하기

단순패턴은 문자열을 있는 그대로 대응시킬ㄷ 때 사용된다. /abc/라는 패턴은 문자열에서 정확히 'abc'라는 문자들이

모두 함께 순서대로 나타나야 대응이 된다.

예를 들어 "hello, do you know your abc's?" 에 대응되고 또 slabcraft안의 abc에 대응된다.

그러나 grab crab같은 문장에도 ab c가 있지만 정확하게 abc가 아닌 공간이 있으므로 대응되지 않는다.

 

 

자 위에 예에서 플래그라는 단어가 등장하였다 . 

정규식은 여섯개의 플래그를 설정할 수 있으며, 이를 통해 전역 검색 또는 대소문자 구분 없는 검색을 수행 할 수 있다.

이플래그들은 각기 사용되기도 하고 함께 사용될 수 있으며 순서에 구분이 없다.

또한 이렇게 설정된 플래그는 나중에 추가되거나 삭제 될 수 없다.

간단히 다시 짚어보면

g : 검색 패턴을 비교할 때 일치하는 모든 부분을 선택하도록 설정

i : 검색 패턴을 비교할 때 대소문자를 구분하지 않도록 설정

m: 검색 패턴을 비교할때 여러 줄의 입력 문자열을 그 상태 그대로 여러 줄로 비교하도록 설정

y: 대상 문자열의 현재 위치부터 비교를 시작하도록 설정함.

 

 

** 특수 문자 사용하기

검색어에서 하나 이상의 b찾거나, 혹은 공백을 찾는 것과 같이 있는 그대로의 대응 이상의 대응이 필요한 경우

패턴에 특수한 문자를 포함시킨다. 예를 들어 /ab*c/는 'a'문자 뒤에 0개 이상의 'b'가 나타나고 바로 뒤에 'c'가 나오는

문자 조합에 대응된다. *문자는 바로 앞의 문자가 0개 이상이라는 것을 의미한다.

cbbaabbbbbbccca - 여기서는 안에 abbbbbbc와 대응이 된다

 

정규식에서 사용되는 특수문자는 정말 많다.... 하나씩 거론하는 것은 힘드니

일단 mozilla 사이트 링크를 걸어 두고 쓰자.

developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

 

정규 표현식 - JavaScript | MDN

정규 표현식은 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴입니다. 자바스크립트에서, 정규 표현식 또한 객체입니다.  이 패턴들은 RegExp의 exec 메소드와 test 메소드  ,

developer.mozilla.org

** 정규식에 사용되는 method

정규식은 RegExp, test, exec, String, match, replace, search, split메소드와 함께 쓰인다.

 

 

** 괄호로 둘러싼 패턴

정규식에서 괄호를 사용하면, 그 부분을 별도로 대응시키면서 대응된 부분을 기억한다.

/a(b)c/는 abc와 대응되면서 'b'를 기억한다. 괄호로 감싸진 문자열을 불러 오려면 배열의 인덱스를 사용하면 된다.

 

괄호로 감쌀 수 있는 문자의 개수에는 제한이 없다. 반환된 배열은  찾아낸 모든 것을 가지고 있다.

 

 

파이썬 배울때 정규표현식을 잠깐 접했었는데.. 이건 그냥 외우기와 익숙해지는걸로 가야겠다..;;;

암튼 개발자로 성장하려면 이것도 잘써야 할 듯 하다.

 

정규표현식을 테스트해보고 또한 다른 사람이 만들어놓은 정규표현식도 함께 볼 수 있는 사이트를 하나 링크 걸어 둔다.

regex101.com/

 

regex101: build, test, and debug regex

Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java. Features a regex quiz & library.

regex101.com

 

'JavaScript > Vanilla Js' 카테고리의 다른 글

ES6 - Default Values  (0) 2021.05.11
ES6 - Arrow function (array function)  (0) 2021.05.10
심심풀이 로또번호 생성기  (0) 2021.05.08
Library && FrameWork  (0) 2021.05.08
Parameter && Argument  (0) 2021.05.08