TIL 23. 정규표현식 RegExp

CHAEIN·2021년 7월 5일
0

정규표현식 (RegExp)

1. 정규식의 역할

  • 문자 검색(search)
  • 문자 대체(replace)
  • 문자 추출(extract)

2. 정규식 테스트 사이트

https://regexr.com/

3. 정규식 생성 방식

// 예제문자
let str = `
010-1234-5678
thesecon@gmail.com 
https://www.omdbapi.com/?apikey=7035c60c&s=frozen
The quick brown fox jumps over the lazy dog.
abcccdddd
`
//생성자
new RegExp('표현', '옵션')
new RegExp('[a-z]', 'gi')

let regexp = new RegExp('the','')
console.log(str.match(regexp)) // the
 
regexp = new RegExp('the','g') // g는 해당 문자열의 모든 the가 추출됨
console.log(str.match(regexp)) // ['the', 'the']

regexp = new RegExp('the','gi') // i는 대문자 소문자를 구분하지 않겠다는 의미
console.log(str.match(regexp)) // ['the', 'The', 'the']



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

regexp = /the/gi
console.log(str.match(regexp)) // ['the', 'The', 'the']

regexp = /fox/gi
console.log(regexp.test(str)) // true

regexp = /Heropy/gi
console.log(regexp.test(str)) // false

regexp = /fox/gi
console.log(str.replace(regexp, 'AAA')) // 'The quick brown AAA jumps over the lazy dog' fox가 AAA로 바뀜
console.log(str) // 원본은 바뀌지 않음 fox가 그대로 있음

const h =`  the hello   world     !

`
console.log(h.replace(/\s/g, '')) // thehelloworld!, 모든 공백을 빈문자열로 교체

4. 정규표현식을 사용하는 메소드 (예시는 바로 위에)

매소드문법설명
test정규식.test(문자열)일치 여부(Boolean) 반환
match문자열.match(정규식)일치하는 문자의 배열(Array) 반환
replace문자열.replace(정규식, 대체문자)일치하는 문자를 대체

5. 플래그(옵션)

플래그설명
g모든 문자 일치(global)
i영어 대소문자를 구분 않고 일치(ignore case)
m여러 줄 일치(multi line)
// 예제문자
let str = `
010-1234-5678
thesecon@gmail.com 
https://www.omdbapi.com/?apikey=7035c60c&s=frozen
The quick brown fox jumps over the lazy dog.
abcccdddd
`

//플래스 사용 예시

console.log(str.match(/the/gi)) // 대소문자 구분없이 모든 the를 찾아 배열로 반환

console.log(str.match(/./gi)) 
// 정규표현식 내에서 .은 문자로 인식되지 않고 모든 문자를 추출하는 기호로 인식된다.
// 따라서 .을 문자로 인식할 수 있도록 앞에 이스케이프 문자인 \를 추가한다.
console.log(str.match(/\./gi)) // ['.', '.', '.', '.']

console.log(str.match(/\.$/gi)) // null $앞에 있는 문자로 끝나는 부분 찾기 (백틱 기호 앞에서 문자데이터가 끝나고 있음)

console.log(str.match(/\.$/gim)) // ['.'] $앞에 있는 문자로 끝나는 각 문장 부분 찾기
// m : 각각의 줄을 시작과 끝이 있는 문장으로 보겠다는 뜻 

6. 패턴(표현)

패턴설명
^ab줄(Line) 시작에 있는 ab와 일치
ab$줄(Line) 끝에 있는 ab와 일치
.임의의 한 문자와 일치
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 사이의 문자 구간에 일치 (숫자)
[가-힣]가부터 힣 사이의 문자 구간에 일치 (한글)
\w63개 문자 (Word, 대소영문52개 + 숫자 10개 +_)에 일치
\b63개 문자에 일치하지 않는 문자 경계(Boundary)
\d숫자(Digit)에 일치
\s공백(Space, Tab 등)에 일치
(?=)앞쪽 일치(Lookahead)
(?<=)뒤쪽 일치(Lookbehind)
// 예제문자
let str = `
010-1234-5678
thesecon@gmail.com 
https://www.omdbapi.com/?apikey=7035c60c&s=frozen
The quick brown fox jumps over the lazy dog.
abcccdddd
`
console.log(str.match(/^t/gim)) // ['t', 'T'], 대소문자 구분없이 t로 시작하는 모든 줄의 문자 t
console.log(str.match(/d$/gm)) //['d'], 소문자 d로 끝나는 모든 줄의 문자 d
console.log(str.match(/h..p/g)) // ['http'], h로 시작해서 p로 끝나는 4글자 
console.log(str.match(/fox|dog/g)) // ['fox', 'dog'], a또는 b와 일치하는 모든 문자
console.log(str.match(/https?/g)) // ['https'] 만약 http가 문자열에 있으면 http도 함께 출력된다. s가 있거나 없거나 앞의 문자들만 일치하면 출력

console.log(str.match(/d{2}/)) //  {'dd'} d가 연속 2번인 문자열 1개
console.log(str.match(/d{2}/g)) //  {'dd', 'dd'} d가 연속 2번인 모든 문자열
console.log(str.match(/d{2,}/g)) //  {'dddd'} d가 연속 2개 이상인 모든 문자열
console.log(str.match(/d{2,3}/g)) //  {'ddd'} d기 연속 2개 이상 3개 이하인 모든 문자열

console.log(str.match(/\w{2,3}/g)) // {'010','123','567' ... }, \w 알파벳 + 숫자 + _ 중의 한 문자 
console.log(str.match(/\b\w{2,3}\b/g)) // ["010", "com", "www", "com", "The", "fox", "the", "dog"]
console.log(str.match(/[fox]/g)) // ["o", "o", "o", "o", "f", "o", "o", "f", "o", "x", "o", "o"], f또는 o또는 x인 모든 문자
console.log(str.match(/[0-9]{1,}/g)) // ["010", "1234", "5678", "7035", "60"]

console.log(str.match(/\w/g)) // 모든 숫자, 문자, _ 추출
console.log(str.match(/\b/g)) // 숫자, 문자, _를 제외한 문자로 이루어진 경계
console.log(str.match(/\bf\w{1,}\b/g)) // ["frozen", "fox"]
console.log(str.match(/\d/g)) // ["0", "1", "0", "1", "2", "3", "4", "5", "6", "7", "8", "7", "0", "3", "5", "6", "0"]
console.log(str.match(/\d{1,}/g)) //["010", "1234", "5678", "7035", "60"]
console.log(str.match(/\s/g)) //모든 줄바꿈과 띄어쓰기 추출

console.log(str.match(/.{1,}(?=@)/g)) // ['thesecon']
console.log(str.match(/(?<=@).{1,}/g)) // ["gmail.com"]

0개의 댓글