[JS] 8. 정규표현식(Regular Expression)

쵱뉴성·2024년 11월 29일

HTML.CSS.JavaScript

목록 보기
14/16
post-thumbnail

1. 정규표현식

정규 표현식(Regular Expression)이란?

  • 특정 규칙을 가진 문자열 집합에 사용하는 형식 언어
  • 유효성 검사, 검색 알고리즘, 문자열 치환 등에서 반복문 없이 효율적으로 찾고자 하는 문자를 찾을 수 있게 도와준다.
  • 언어에 독립적으로 존재하며 java, oracle, js 등 다양한 언어에서 사용할 수 있다.

1.1. 정규표현식 객체 생성

  • var re1 = 정규표현식;
  • var re2 =new RegExp(정규표현식);

위와 같이 변수에 직접 정규표현식을 초기화하거나, new RegExp(정규표현식) 생성자를 통해 변수에 초기화할 수 있다.

2. 정규표현식 실행

실행에 앞서 사용할 세 정규표현식(regExp)

 var re1 = /a/; // 문자열 a를 찾을 때
var re2 = new RegExp(/[0-9]/); // 0부터 9까지 숫자를 찾을 때
var re3 = new RegExp("[a-z]"); // a-z까지의 영문자를 찾을 때

(1) .test(문자열) : 문자열이 정규표현식에 맞는지 확인하여 boolean 값을 반환

  • regExp.test(문자열);
1. 문자열에 a가 포함되어 있으면 true
console.log(re1.test('abcde')); t
console.log(re1.test('bcde')); f

2. 문자열에 숫자가 포함되어 있으면 true
console.log(re2.test('mkm123')); t 
console.log(re2.test('mkm')); f

3. 문자열에 영어 소문자가 포함되어 있으면 true
console.log(re3.test('가나다Mkm123'));  t
console.log(re3.test('가나다MKM123'));  f

(2) .exec() : 정규표현식과 일치하는 요소 한 번만 찾아서 배열에 넣는다.

  • regExp.exec(문자열);
1. 문자열에 a와 일치하는 요소를 한 번만 찾아서 배열로 반환
console.log(/a/g.exec('acba'));

(3) match : exec() 함수와 동일하게 일치하는 요소를 찾지만 모두 배열에 넣음

  • 문자열.match(regExp);
1. 문자열에 a와 일치하는 요소를 모두 찾아서 배열로 반환
console.log('acba'.match(/a/g));
exec()match

(4) search : 문자열에서 정규표현식과 일치하는 문자의 첫 인덱스 위치

  • 문자열.search(regExp);
1. 문자열에서 a가 포함된 첫 인덱스 반환
console.log('sdfnaklne'.search(re1)); 

console - 4 출력

(5) replace(찾을 문자, 바꿀 문자) : 문자열을 일치하는 정규표현식을 바꿀 문자로 변경

  • 문자열.replace(regExp, 바꿀문자)
1. 문자열에서 a를 찾아 A로 바꾸기
console.log('cabbbacca'.replace(/a/g,'A'));

console - cAbbbAccA 출력

(6) split(구분자 | 정규식) : 정규식 기준으로 문자를 구분

1. , 구분자로 분리 시 "  양파" "  마늘" 등 공백이 포함
console.log('사과, 배,  양파,  마늘'.split(","));  

2. \s는 space의 약자 *은 있을 수도 있고 없을 수도 있음 = , 앞뒤로 공백이 있을 수도 없을 수도 있음
console.log('사과, 배,  양파,  마늘'.split(/\s*,\s*/)); 


2.1. flag 문자

  • g(global) : 정규식에 대한 전역 비교를 수행하고자 할 때 사용.
    g가 없으면 첫번째로 매칭되는 조건이 있는 경우 검사를 종료.
    g가 있으면 모든 문자열에 대해 정규식과 매치되는 문자가 있는지 검사한다.
  • m(multi-line) : 문자열이 여러 줄(\n)로 존재하는 경우 줄단위 비교를 수행한다.
  • i(ignore) : 영문자 중 대소문자를 구분하지 않고 비교를 수행한다.
  • $& : 매칭된 문자를 가리키는 와일드 카드
문자열에서 a를 찾아 형광펜 표시 (css생략)
var str = 'Javascript jQuery Ajax';
area.innerHTML =  str.replace(/a/gmi, "<mark>$&</mark>"); 
flag 문자 g표기 Xflag 문자 g표기

2.2. anchor 문자

  • ^ : 문자열의 시작
  • $ : 문자열의 끝
var str = 'Javascript\nxxxx\njQuery\nAjax';
1. j로 시작하는 문자열 표기
area.innerHTML = str.replace(/^j/gim, '<mark>$&</mark>');
2. x로 끝나는 문자열 표기
area.innerHTML = str.replace(/x$/mig, '<mark>$&</mark>');
1번 /^j/gim2번 /x$/gim

2.3. .(dot) : 임의의 한글자 의미

1. a랑 b 사이에 한 글자가 들어가있는지 검사
var re2 = /a.b/g; 
area.innerHTML = "ab aab aaab".replace(re2, "<mark>$&</mark>");

2. in이후 두 글자로 끝나는 문자열
var re3 = /in..$/; // in이후 두 글자로 끝나는 문자열 검사
['goingo', 'goin','gointo','going'].forEach(function(str) {
            console.log(re3.test(str), str);
});

3. c로시작해서 k로 끝나는 다섯글자
var re4 = /^c...k$/;
['ck','cdk','cdak','cdawk','cdawak'].forEach( str => {
            console.log(re4.test(str), str);
});
1번2번3번

2.4. []

  • "한글자"를 의미하여 문자의 범위를 나타낼 때 사용
  • 대괄호 안에서 ^가 사용되는 경우 앵커문자가 아닌 특정문자를 제외하고자 하는 기호로써 사용된다.
var s = "Javascript jQuery Ajax 12345";

1. a 또는 j가 포함된 문자열 표기
area.innerHTML = s.replace(/[aj]/gi, '<mark>$&</mark>');

2. a 또는 j가 아닌 문자열 표기
area.innerHTML = s.replace(/[^aj]/gi, '<mark>$&</mark>');
1번2번

2.5. 문자 클래스

  • \d : (decimal) 숫자
  • \w : (word) 영문자, 숫자, _(언더바)
  • \s : (space) 공백문자, 탭, 개행문자
  • \D : 숫자가 아닌 모든 몬주
  • \W : 영문자, 숫자, _가 아닌 모든 문자
  • \S : 공백문자, 탭 ,개행문자가 아닌 모든 문자
var s = "A1 B2 c3 d_4 e:5' ` ffGG6767--__--!\"@#$%^&*()     가\n나\n다\n";

1. \d
area.innerHTML = s.replace(/\d/g, '<mark>$&</mark>');
2. \w
area.innerHTML = s.replace(/\w/g, '<mark>$&</mark>');
3. \s
area.innerHTML = s.replace(/\s/g, '<mark>$&</mark>');
문자 클래스화면 표기
\d
\w
\s

2.6. 그룹핑 ( | )

  • | : 선택 (or의 뜻)
var s = "월요일에는 월요병, 화요일은 화가 부글부글, " + "수요일은 술이 확 땡긴다. 목요일이 목이 컥 막히고, 금요일은 금방 올거 같지 않다.";

1. 수요일 목요일 금요일을 표기
area.innerHTML = s.replace(/(수요일|목요일|금요일)/g, '<mark>$&</mark>');

2. 수 또는 목 또는 금 뒤에 요일이 오는 문자 표기
area.innerHTML = s.replace(/(수|목|금)요일/g, '<mark>$&</mark>');

3. 수목금 중 한글자 뒤 요일이 오는 문자 표기
area.innerHTML = s.replace(/[수목금]요일/g, '<mark>$&</mark>');
console 모두 동일

0개의 댓글