정규표현식

honeyricecake·2022년 8월 8일
0

자바스크립트

목록 보기
20/20

정규표현식이란 문자열을 검색하고 대체하는 데 사용가능한 일종의 형식 언어(패턴)이다.
간단한 문자 검색부터 이메일, 패스워드 검사 등의 복잡한 문자 일치 기능 등을 정규식 패턴으로 빠르게 수행할 수 있다.

전규표현식은 크게 다음과 같은 역할을 수행한다.

  1. 문자 검색 (search)
  2. 문자 대체 (replace)
  3. 문자 추출 (extract)

자바스크립트 정규식 생성

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

즉, new RegExp('표현', '옵션') 으로 만들어 사용할 수 있다.

const str = `
thesecon@1234.com
010-1234-5678
asdf@naver.com
The quick brown fox jumps over the lazy dog.
abbcccdddd`

const regexp = new RegExp('the', 'g')
console.log(str.match(regexp))  // 문자열 안에 있는 모든 the로 배열 만듬, 즉, 배열의 길이는 str애 있는 the의 개수가 됨

여기서 g는 처음 나오는 하나 뿐만 아니라 모두 찾겠다는 의미이다.
옵션에 i를 더 붙이면 대소문자 구분을 하지 않는다.

const str = `
thesecon@1234.com
010-1234-5678
asdf@naver.com
The quick brown fox jumps over the lazy dog.
abbcccdddd`

const regexp = /the/gi
console.log(str.match(regexp))  // 문자열 안에 있는 모든 the로 배열 만듬, 즉, 배열의 길이는 str애 있는 the의 개수가 됨

정규 표현식은 이렇게도 만들 수 있다.

정규 표현식을 다루는 다양한 메소드

  1. test :
    정규식과 일치하는 특정한 문자열이 있는지 boolean데이터를 리턴해줌

문법: 정규식.test(문자열)

  1. match :
    일치하는 문자열의 배열(Array) 반환

문법: 문자열.match(정규식)

  1. replace :
    일치하는 문자열을 대체하고 대체된 문자열(String) 반환

문법: 문자열.replace(정규식, 대체문자)

이 때, replace 메소드는 str.replace(정규식, 대체문자)를 수행했을 때
수행한 문자열을 리턴하지만 str 자체의 내용은 변하지 않는다.
그래서 str 자체의 내용을 바꾸고 싶으면 str = str.replace(정규식, 대체문자)로 바뀐 문자열을 새로 str에 대입해주어야 한다.

플래그(옵션)

g 는 모든 문자 일치(global)
i 는 영어 대소문자를 구분 않고 일치
m 은 여러 줄 일치 (multi line)

(정규표현식 표기법 다시 보기 : /정규식/플래그 )

이스케이프 문자: 백슬래시 기호를 통해 본래의 기능에서 벗어나 상태가 바뀌는 문자:
ex. '\n'(줄바꿈 문자)
그리고 원래 정규식에서 . 등의 문자는 명령어로 해석되기 때문에 그냥 마침표로 쓰고 싶을 때도 백슬래시를 활용한다.
ex. '.'

/.\$/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
`

라고 가정했을 때
문자열이 끝나는 부분은 개행문자이므로 null을 리턴하는데
/\.$/gim 이렇게 쓰면 각 줄을 하나의 문자열로 인식한다.

그럼 각각의 줄에 마침표로 끝나는 부분이 4번째 줄에 있으므로
str.match(/\.$/gim) 은 . 하나를 리턴하게 된다.

패턴(표현)

^ab : 문자열의 시작에 있는 ab
ab$ : 문자열의 끝에 있는 ab

ex.

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
`

const regexp = /^t/gmi
console.log(str.match(regexp))

t가 2개 들어 있는 배열이 리턴된다.

. : 임의의 한 문자와 일치
a|b : a 또는 b와 일치
ab? : b가 없거나 b와 일치

ex.

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
`

const regexp = /h..p/g
console.log(str.match(regexp))

ex.

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
http://localhost:1234
`

const regexp = /https?/g
console.log(str.match(regexp))

{3} : 3개 연속 일치
{3,} : 3개 이상 연속 일치
{3,5} : 3개 이상 5개 이하(3 ~ 5개) 연속 일치

ex.

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.
abbcccdddddaadd
http://localhost:1234
`

const regexp = /d{3}/g
console.log(str.match(regexp))

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.
abbcccdddddaadd
http://localhost:1234
`

const regexp = /d{2,}/g
console.log(str.match(regexp))

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.
abbcccdddddaadd
http://localhost:1234
`

const regexp = /\b\w{3}\b/g
console.log(str.match(regexp))

\b는 정규식 단어 경계 메타 문자로 \w와 그 외의 문자 사이의 경계에 대응된다.

\w는 모든 숫자와 영어에 대응된다.

즉 위의 \b\w{3}\b는 숫자와 영어가 아닌 문자, 숫자 영어 3연속 , 숫자와 영어가 아닌 문자 로 구성된 문자열에서 w{3}부분만 출력한다!!

[abc] : a 또는 b 또는 c
[a-z] : a부터 z사이의 문자 구간에 일치(영어 소문자)
[A-Z] : A부터 Z사이의 문자 구간에 일치(영어 대문자)
[0-9] : 0부터 9사이의 문자 구간에 일치(숫자)
[가-힣]: 가부터 힣 사이의 문자 구간에 일치(한글)

\w : 63개 문자(Word, 대소영문 52개 + 숫자 10개 + _)에 일치
\b : 63개 문자에 일치하지 않는 문자 경계(boundary)
\d : 숫자(Digit)에 일치
\s : 공백(Space, Tab 등)에 일치

ex.

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.
abbcccdddddaadd
http://localhost:1234
`

const regexp = /\bf\w{1,}\b/g
console.log(str.match(regexp))

(?=) : 앞쪽 일치 (Lookahead)
(?<=) : 뒤쪽 일치 (Lookbehind)

ex.

str.match(/.{1,}(?=@)/g)
str.match(/(?<=@).{1,}/g)

0개의 댓글