정규표현식

달다로·2024년 7월 4일

JS

목록 보기
23/26
post-thumbnail

📌정규표현식(RegExp)

테스트 사이트

컴퓨터가 글자나 숫자 같은 것들을 찾아내는 행위를 의미합니다.

  • 정규식
  • Regular Expression (RegExp)

정규표현식은 다음과 같은 행위를 할 수 있습니다.

  • 문자 검색 (search)
    • 어떤 글자나 숫자, 단어가 있는지 찾기
  • 문자 대체 (replace)
    • 특정한 글자나 숫자가 있는 곳을 바꾸기
  • 문자 추출 (extract)
    • 글자나 숫자가 일정한 규칙에 맞는지 확인하기

정규식 생성방법

// 생성자
new RegExp('표현', '옵션')
new RegExp('[a-z]', 'gi')

// 리터럴
/표현/옵션
/[a-z]/gi

정규식을 사용해보기 위한 예제

const str = `
010-1234-5678
thesecon@gmail.com
https://www.omdbapi.com/?apikey=7035c60c&s=frozen
The quick brown fox jumps over the lazy dog.
abbcccdddd
`

메소드

메소드문법설명
test정규식.test(문자열)일치 여부(Boolean) 반환
match문자열.match(정규식)일치하는 문자의 배열(Array) 반환
replace문자열.replace(정규식, 대체문자)일치하는 문자를 대체
//test
console.log('전화번호가 있나요?:', /\d{3}-\d{4}-\d{4}/.test(str));
// true

//match
console.log('URL 찾기:', str.match(/https?\/\/[^\s]+/g));
// ["https://www.omdbapi.com/?apikey=7035c60c&s=frozen"]

//replace
console.log('중복 글자 줄이기:', str.replace(/(.)\1+/g, '$1'));
// "010-1234-5678\nthesecon@gmail.com\nhttps://www.omdbapi.com/?apikey=7035c60c&s=frozen\nThe quick brown fox jumps over the lazy dog.\nabcd\n"

플래그(옵션)

정규표현식에서 자주 사용되는 플래그 g, i, m 은 검색 동작을 제어하는 데 사용됩니다.

플래그설명
g모든 문자 일치(global)
i영어 대소문자를 구분 않고 일치(ignore case)
m여러 줄 일치(multi line)
const str = "123 ABC 456 DEF 789";
console.log(str.match(/\d+/)); // ["123"]
console.log(str.match(/\d+/g)); // ["123", "456", "789"]

const str = "Apple apple aPPle aPpLE";
console.log(str.match(/apple/)); // ["apple"]
console.log(str.match(/apple/i)); // ["Apple"]
console.log(str.match(/apple/gi)); // ["Apple", "apple", "aPPle", "aPpLE"]

const str = `Hello world
Goodbye world
Hello again`;

// '^Hello'는 첫 번째 줄의 시작에서만 일치
console.log(str.match(/^Hello/)); // ["Hello"]
// 'm' 플래그로 각 줄의 시작에서 "Hello"를 찾음
console.log(str.match(/^Hello/m)); // ["Hello", "Hello"]

패턴(표현)

정규표현식의 패턴은 특정한 문자열이나 문자 조합을 찾기 위해 사용되는 규칙입니다.
이 패턴들은 특정 문자, 문자 집합, 숫자, 특수 문자, 그리고 문자 위치 등을 표현하는 기호와 규칙들을 사용해 구성됩니다.
이를 통해 텍스트에서 원하는 정보를 효율적으로 검색하거나 변환할 수 있습니다.

기본 패턴

// 문자 패턴
/cat/ // "cat"이라는 단어를 찾음

// 문자 집합
/[abc]/ // 'a', 'b', 'c' 중 하나를 찾음
  
// 부정 문자 집합
  /[^abc]/ // 'a', 'b', 'c'를 제외한 모든 문자

그 외 다양한 패턴

패턴설명
^hello줄(Line) 시작에 문자열을 의미 (hello 로 시작하는 문자열과 매치)
ab$줄(Line) 끝에 있는 문자열을 의미
.임의의 한 문자와 일치
a|ba 또는 b와 일치
ab?b가 없거나 b와 일치
{3}3개 연속 일치 (반복문자)
{3,}3개 이상 연속 일치 (반복문자)
{3,5}3개 이상 5개 이하(3~5개) 연속 일치 (반복문자)
[abc]a 또는 b 또는 c
[a-z]a부터 z 사이의 문자 구간에 일치(영어 소문자)
[A-Z]A부터 Z 사이의 문자 구간에 일치(영어 대문자)
[0-9]0부터 9 사이의 문자 구간에 일치(숫자)
[가-힣]가부터 힣 사이의 문자 구간에 일치(한글)
(?=...)앞쪽 일치(Lookahead)
(?<=...)뒤쪽 일치(Lookbehind)

\w, \b, \d, \s 의 경우에는 소문자와 대문자의 역할이 다르니 사용할 때 주의해야합니다.

패턴설명
\w63개 문자(Word, 대소영문52개 + 숫자10개 + _ 에 일치
\W단어 문자가 아닌 문자, '!', '#', ' ' 등과 매치
\b단어의 경계, /\bcat\b/ // 단어로서의 'cat'과 매치 (예: 'cat', 'a cat', 'cat!')
\B단어의 경계가 아닌 곳, /\Bcat/ 'catalog' 같은 곳의 'cat'과 매치
\d숫자(Digit)에 일치
\D숫자가 아닌 문자, 'a', '-', ' ' 등과 매치
\s공백(Space, Tab 등) 문자
\S공백이 아닌 문자, 'a', '1', '#' 등과 매치
// 반복문자 줄이기
console.log('반복 줄이기:', "aaaabbbcccdde".replace(/(.)\1+/g, '$1'));
// "abcde"
profile
나이들어서 공부함

0개의 댓글