[JS] 정규표현식의 기본 문법과 규칙

somin·2021년 8월 25일

JavaScript

목록 보기
15/16

정규표현식 기본

1. 개념

문자열 str 이 주어질 때, str의 길이가 5 또는 7이면서 숫자로만 구성되어 있는지를 확인해 주는 함수를 작성하세요. 결과는 Boolean으로 리턴됩니다. 예를 들어 str가 c2021이면 false, 20212이면 true를 리턴합니다.

function solution(str) {
    return /^\d{5}$|^\d{7}$/.test(str);
}
  • 문자열에서 특정한 문자를 찾아내는 도구
  • 특정한 규칙을 갖는 문자열로 이루어진 표현식이며, 정규표현식에서 특수 문자는 각각의 고유한 규칙을 갖고 있음
  • 규칙들을 조합하여 원하는 패턴을 만들고, 특정 문자열에서 해당 패턴과 대응하는 문자를 찾을 수 있음

2. 예제

1) 이메일 유효성 검사

let regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i

2) 휴대전화 번호 유효성 검사

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

3. 사용 방법

1) 리터럴 패턴

let pattern = /c/;
// 'c를 찾을 거야!'라고 컴퓨터에게 명령을 내리는 것
// 찾고 싶은 c를 담은 변수 pattern을 이용하여 c를 찾을 수 있음
  • 정규표현식 규칙을 슬래시(/)로 감싸 사용
  • 슬래시 안에 들어온 문자열이 찾고자 하는 문자열

2) 생성자 함수 호출 패턴

let pattern = new RegExp('c');
// new를 이용해서 정규 표현식 객체를 생성
// 리터럴 패턴과 동일하게 'c 를 찾을 거야!'라는 명령을 의미
  • RegExp 객체의 생성자 함수를 호출하여 사용

정규표현식 내장 메소드

  • JavaScript 에서 정규표현식은 객체로서 내장 메소드를 가짐
    *String 객체에서도 정규표현식을 사용할 수 있는 내장메소드를 가지고 있음
  • 내장 메소드를 이용하면 어떤 문자열 안에 원하는 정보를 찾거나 특정 패턴에 대응하는 문자열을 검색, 추출, 다른 문자열로 치환할 수 있음

1. RegExp 객체의 메소드

1) exec()

let pattern = /k/
// 찾고자 하는 문자열
pattern.exec('kkakka') 
// 검색하려는 대상을 exec 메소드의 첫 번째 인자로 전달

// 즉, 'kkakka'가 'k'를 포함하고 있는지를 확인
// 이 경우 'k'가 포함되어 있으므로, ['k']를 반환
  • exec : execution 의 줄임말로, 원하는 정보를 뽑아내고자 할 때 사용
  • 검색의 대상이 찾고자 하는 문자열에 대한 정보를 가지고 있다면 이를 배열로 반환
  • 찾는 문자열이 없다면 null을 반환

2) test()

let pattern = /k/
pattern.test('kkakka')
// 이 경우 'kkakka'가 'k'를 포함하고 있으므로 true를 리턴
  • 찾고자 하는 문자열이 대상 안에 있는지의 여부를 boolean으로 리턴

2. String 객체의 메소드

1) match()

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

-exec()와 비슷한 기능을 하며, 정규 표현식을 인자로 받아 주어진 문자열과 일치된 결과를 배열로 반환

  • 일치되는 결과가 없으면 null을 리턴

2) replace()

let pattern = /k/
let str = 'kkakka'
str.replace(pattern, 'K')
// str안에서 pattern을 검색한 후 'K'로 변경하여 그 결과를 리턴
// 여기서는 'Kkakka'가 반환
  • '검색 후 바꾸기'를 수행
  • 첫 번째 인자로는 정규표현식을 받고, 두 번째 인자로는 치환하려는 문자열을 받음
  • 문자열에서 찾고자 하는 대상을 검색해서 이를 치환하려는 문자열로 변경 후 변경된 값을 리턴

3) split()

"123,456,789".split(",")  // ["123", "456", "789"]
"12304560789".split("0")  // ["123", "456", "789"]
  • 주어진 인자를 구분자로 삼아, 문자열을 부분 문자열로 나누어 그 결과를 배열로 반환
"JavaScript".search(/script/) // -1 대소문자를 구분
"JavaScript".search(/Script/) // 4
"kkakka".search(/kak/) // 1
  • 정규표현식을 인자로 받아 가장 처음 매칭되는 부분 문자열의 위치를 반환
  • 매칭되는 문자열이 없으면 -1을 반환

정규표현식에서의 flag 설정

  • 정규표현식은 플래그를 설정해 줄 수 있음
  • 플래그는 추가적인 검색 옵션의 역할을 수행
  • 이 플래그들은 각자 혹은 함께 사용하는 것이 모두 가능하며, 순서에 구분이 없음
  • 자주 사용되는 플래그 : i, g, m

1. i

let withi = /j/i
let withouti = /j/
"JavaScript".match(withi) // ['J']
"JavaScript".match(withouti) // null
  • 대소문자를 구분하지 않음

2. g

let withg = /k/g
let withoutg = /k/
"kkakka".match(withg) // ["k", "k", "k", "k"]
"kkakka".match(withoutg) // ['k']
  • global의 약자로, g를 붙이면 검색된 모든 결과를 리턴

4. m

let str = `1st : black
2nd : cat
3rd : kkakka`

str.match(/k/gm)
// 3개의 행을 검색하여 모든 k를 반환
// ["k", "k", "k", "k", "k"]

str.match(/k/m)
// m은 다중행을 검색하게 해 주지만, g를 빼고 검색하면 검색 대상을 찾는 순간 검색을 멈춤
// 첫 행의 ['k']만 리턴
  • m을 붙이면 다중행을 검색
profile
✏️

0개의 댓글