정규표현식

MihyunCho·2021년 4월 20일
0
post-thumbnail

정규표현식 (regex)

/regex?/

Regular Expression의 약자로, 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어.
텍스트에서 원하는 특정한 패턴을 찾을 때 유용함.

💡 다양한 언어에서 내부적으로 지원하고 있으며, 텍스트 or 코드 에디터에서도 정규표현식을 이용하여 검색할 수 있게 되었다.

❓사용법

/regex?/(i)

  1. 슬래시 (/ /) 를 이용하여 정규표현식을 표현하고,
  2. 슬래시 (/pattern/) 안에 패턴을 작성 후
  3. i : 어떤 옵션을 이용하여 검색할지 플래그를 활용할 수 있다 (optional)
let pattern = new RegExp('c'); // 이렇게 사용할수도 있다.
// new 를 이용해서 정규 표현식 객체를 생성하고,
// 리터럴 패턴과 동일하게 'c 를 찾을꺼야!' 라는 명령.

문법 정리

Groups and ranges

  • | 또는
  • () 그룹
  • [] 문자셋, 과호안의 어떤 문자든
  • [^] 부정 문자셋, 괄호안의 어떤 문자가 아닐 때
  • (?:) 찾지만 기억하지는 않음

Quantifiers

  • ? 있거나 없거나(zero or one)
  • * 있거나 없거나 많거나(zero or more)
  • + 하나 또는 많이(one or more)
  • {n} n번 반복
  • {min,} 최소
  • {min, max} 최소, 그리고 최대

Boundary-type

  • \b 단어 경계
  • \B 단어 경계가 아닌 것
  • ^ 문장의 시작
  • $ 문장의 끝

Character classes

  • \ 특수 문자가 아닌 문자
  • . 어떤 글자 (줄바꿈 문자 제외)
  • \d digit 숫자
  • \D digit 숫자 아님
  • \w word 문자
  • \W word 문자 아님
  • \s space 공백
  • \S space 공백 아님

정규표현식 내장 메소드

RegExp 객체의 메소드

exec()

exec 는 execution 의 줄임말로, 원하는 정보를 뽑아내고자 할 때 사용.
검색의 대상이 찾고자 하는 문자열에 대한 정보를 가지고 있다면 이를 배열로 반환하며, 찾는 문자열이 없다면 null을 반환.

let pattern = /c/; // 찾고자 하는 문자열
pattern.exec('codestates') // 검색하려는 대상을 exec 메소드의 첫 번째 인자로 전달합.
// 즉, 'codestates' 가 'c' 를 포함하고 있는지를 확인.
// 이 경우 'c' 가 포함되어 있으므로, ['c'] 를 반환.

test()

찾고자 하는 문자열이 대상안에 있는지의 여부를 boolean 으로 리턴.

let pattern = /c/;
pattern.test('codestates');
// 이 경우는 'codestates'가 'c'를 포함하고 있으므로 true 를 리턴.

String 객체의 메소드

match()

RegExp.exec() 와 비슷한 기능을 하며, 정규 표현식을 인자로 받아 주어진 문자열과 일치된 결과를 배열로 반환.
일치되는 결과가 없으면 null 을 리턴.

let pattern = /c/;
let str = 'codestates';
str.match(pattern);
// str 안에 pattern 이 포함되어 있으므로, ['c'] 를 반환.

replace()

'검색 후 바꾸기'를 수행.
첫 번째 인자로는 정규표현식을 받고, 두 번째 인자로는 치환하려는 문자열을 받음.
문자열에서 찾고자 하는 대상을 검색해서 이를 치환하려는 문자열로 변경 후 변경된 값을 리턴.

let pattern = /c/;
let str = 'codestates';
str.replace(pattern, 'C');
// str 안에서 pattern 을 검색한 후 'C' 로 변경하여 그 결과를 리턴.
// 여기서는 'Codestates'가 반환.

split()

주어진 인자를 구분자로 삼아, 문자열을 부분 문자열로 나누어 그 결과를 배열로 반환.

"123,456,789".split(",")  // ["123", "456", "789"]
"12304560789".split("0")  // ["123", "456", "789"]

정규표현식을 인자로 받아 가장 처음 매칭되는 부분 문자열의 위치를 반환.
매칭되는 문자열이 없으면 -1을 반환.

"JavaScript".search(/script/); // -1 대소문자를 구분함.
"JavaScript".search(/Script/); // 4
"codestates".search(/ode/); // 1

흔하게 사용하는 정규표현식

이메일 유효성 검사

let regExp = /^0-9a-zA-Z@0-9a-zA-Z\.[a-zA-Z]{2,3}$/i;

휴대전화 번호 유효성 검사

let regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;
profile
Sic Parvis Magna 🧩

0개의 댓글