정규표현식

현성·2023년 12월 8일
0

정규표현식(RegExp, Regular Expression)

  • 문자 검색(Search)
  • 문자 대체(Replace)
  • 문자 추출(Extract)

생성자

  • new RegExp('포현', '옵션')
  • new RegExp('[a-z]', 'gi')

리터럴

  • /표현/옵션
  • /[a-z]/gi
const str = `
010-1234-5678
thesecon@gmail.com
Hello World!
https://www.omdbapi.com/?apikey=7035c60c&s=frozen
The quick brown fox jumps over the lazy dog.
hello@naver.com
http://localhost:1234
동해물과 백두산이 마르고 닳도록
abbcccddddeeeee
`;

// 생성자 방식
// const regexp = new RegExp("the", "gi");

// 리터럴 방식
const regexp = /the/gi;
console.log(str.match(regexp)); // ['the', 'The', 'the']

메소드

  • 정규식.test(문자열) - 일치 여부 반환
  • 문자열.match(정규식) - 일치하는 문자의 배열 반환
  • 문자열.replace(정규식, 대체문자) - 일치하는 문자를 대체
const str = `
010-1234-5678
thesecon@gmail.com
Hello World!
https://www.omdbapi.com/?apikey=7035c60c&s=frozen
The quick brown fox jumps over the lazy dog.
hello@naver.com
http://localhost:1234
동해물과 백두산이 마르고 닳도록
abbcccddddeeeee
`;

const regexp = /fox/gi;

console.log(regexp.test(str)); // true
console.log(str.match(regexp)); // ['fox']
console.log(str.replace(regexp, "cat")); // "fox"를 찾아 "cat"으로 교체합니다.

// 이렇게 사용도 가능합니다.
console.log(/fox/gi.test(str));
console.log(str.match(/fox/gi));
console.log(str.replace(/fox/gi, "cat"));

옵션(플래그)

  • g : 모든 문자 일치(Global)

  • i : 영어 대소문자를 구분 않고 일치(Ignore case)

  • m : 여러 줄 일치(Multi line), 각각의 줄을 시작과 끝으로 인식!

  • 이스케이프 문자(Escape Character) : \기호를 통해 본래 기능에서 벗어나 상태가 바뀌는 문자를 말합니다.

const str = `
010-1234-5678
thesecon@gmail.com
Hello World!
https://www.omdbapi.com/?apikey=7035c60c&s=frozen
The quick brown fox jumps over the lazy dog.
hello@naver.com
http://localhost:1234
동해물과 백두산이 마르고 닳도록
abbcccddddeeeee
`;

console.log(str.match(/the/));
console.log(str.match(/the/g));
console.log(str.match(/the/gi));
console.log(str.match(/\.$/gi));
console.log(str.match(/\.$/gim));

패턴

예제 문자열

const str = `
010-1234-5678
thesecon@gmail.com
Hello World!
https://www.omdbapi.com/?apikey=7035c60c&s=frozen
The quick brown fox jumps over the lazy dog.
hello@naver.com
http://localhost:1234
동해물과 백두산이 마르고 닳도록
abbcccddddeeeee
`;

^ab

  • 줄(Line) 시작에 있는 ab와 일치
console.log(str.match(/^h.../gm)); // ['http', 'hell', 'http']

ab$

  • 줄(Line) 끝에 있는 ab와 일치
// \.은 패턴으로써의 기능은 없어지고 단순한 문자 .으로 생각할 수 있습니다.
console.log(str.match(/\.com$/gm)); // ['.com', '.com']

.

  • 임의의 한 문자와 일치
console.log(str.match(/...\.com$/gm)); // ['ail.com', 'ver.com']

a|b

  • a 또는 b와 일치
console.log(str.match(/fox|dog/g)); // ['fox', 'dog']
console.log(str.match(/fox|dog|\.com/g)); // ['.com', '.com', 'fox', 'dog', '.com']

ab?

  • a가 없거나 b와 일치
  • ?바로 앞에 있는 문자에만 적용되는 개념입니다.
console.log(str.match(/https?/g)); // ['https', 'http']

{3}

  • 3개 연속 일치
console.log(str.match(/\d{3}/g)); // ['010', '123', '567', '703', '123']
console.log(str.match(/e{3}/g)); // ['eee']
console.log(str.match(/d{3}/g)); // ['ddd']
console.log(str.match(/b{3}/g)); // null

{3,}

  • 3개 이상 연속 일치
console.log(str.match(/\d{3,}/g)); // ['010', '1234', '5678', '7035', '1234']

{3,5}

  • 3개 이상 5개 이하 연속 일치
console.log(str.match(/\d{3,5}/g)); // ['010', '1234', '5678', '7035', '1234']

+

  • 1회 이상 연속 일치
  • {1,}로 작성해도 동일합니다.
console.log(str.match(/\d+/g)); // ['010', '1234', '5678', '7035', '60', '1234']

console.log(str.match(/\d{1,}/g)); // ['010', '1234', '5678', '7035', '60', '1234']

[ab]

  • a 또는 b
console.log(str.match(/[ab]/g)); // ['a', 'b', 'a', 'a', 'b', 'a', 'a', 'a', 'a', 'b', 'b']

// console.log(str.match(/f|o|x|d|o|g/g));
console.log(str.match(/[foxdog]/g));
// ['o', 'g', 'o', 'o', 'o', 'd', 'o', 'd', 'o', 'f', 'o', 'o', 'f', 'o', 'x', 'o', 'd', 'o', 'g', 'o', 'o', 'o', 'o', 'd', 'd', 'd', 'd']

[a-z]

  • a부터 z사이의 문자 구간에 일치(영어 소문자)
// a~z까지의 문자로 이어진 모든 단어를 반환합니다.
console.log(str.match(/[a-z]+/g));

[A-Z]

  • A부터 Z사이의 문자 구간에 일치(영어 대문자)
console.log(str.match(/[A-Z]/g)); // ['H', 'W', 'T']

// 영어 대소문자로 이어진 모든 단어를 반환합니다.
console.log(str.match(/[a-zA-Z]+/g));

[0-9]

  • 0부터 9사이의 문자 구간에 일치(숫자)
console.log(str.match(/[0-9]+/g)); // ['010', '1234', '5678', '7035', '60', '1234']

// 영어 대소문자와 숫자를 포함한 이어진 모든 단어를 반환합니다.
console.log(str.match(/[a-zA-Z0-9]+/g));

[가-힣]

  • 가부터 힣 사이의 문자 구간에 일치(한글)
console.log(str.match(/[가-힣]+/g)); // ['동해물과', '백두산이', '마르고', '닳도록']

console.log(str.match(/[가-힣]{3}/g)); // ['동해물', '백두산', '마르고', '닳도록']

// 영어 대소문자와 한글을 포함한 이어진 모든 단어를 반환합니다.
console.log(str.match(/[a-zA-Z가-힣]+/g));

/w

  • 63개 문자(Word, 대소영문52개 + 숫자10개 + _)에 일치
console.log(str.match(/\w{7,9}/g));
// ['thesecon', 'omdbapi', '7035c60c', 'localhost', 'abbcccddd']

/b

  • 63개 문자에 일치하지 않는 문자 경계(Boundary)
console.log(str.match(/\b[0-9]+/g));// ['010', '1234', '5678', '7035', '1234']

// 7035는 뒤에 c로 이어지기 때문에 제외됩니다.
console.log(str.match(/\b[0-9]+\b/g)); // ['010', '1234', '5678', '1234']

/d

  • 숫자(Digit)에 일치
console.log(str.match(/\b\d+/g)); // ['010', '1234', '5678', '7035', '1234']

// 7035는 뒤에 c로 이어지기 때문에 제외됩니다.
console.log(str.match(/\b\d+\b/g)); // ['010', '1234', '5678', '1234']

/s

  • 공백(Space, Tab 등)에 일치
// \n은 줄바꿈을 의미합니다.
console.log(str.match(/\s/g));

(?:)

  • 그룹 지정
// (?:\w+\.?)처럼 괄호안에 만들어 놓은 패턴을 반복하여 사용할 수 있습니다.

console.log(str.match(/https?:\/\/(?:\w+\.?)+\/?/g));
// ['https://www.omdbapi.com/', 'http://localhost']

(?=)

  • 앞쪽 일치(Lookahead)
console.log(str.match(/.+(?=과)/g)); // ['동해물']

(?<=)

  • 뒤쪽 일치(Lookbehind)
console.log(str.match(/(?<=과).+/g)); // [' 백두산이 마르고 닳도록']

예제

  • 핸드폰번호 추출
console.log(str.match(/\d{3}-\d{4}-\d{4}/g)); // ['010-1234-5678']

  • 이메일 추출
console.log(str.match(/\w+@\w+\.\w+/g)); // ['thesecon@gmail.com', 'hello@naver.com']
profile
👈🏻 매일 꾸준히 성장하는 개발자 !

0개의 댓글