정규표현식

Judo·2020년 12월 26일
1
post-thumbnail

정규 표현식 정의 방법


  • 생성자를 이용하여 새 RegExp 객체를 인스턴스화 하는 방법
const re1 = new RegExp('hey');
  • 정규식 리터럴 형식을 사용하는 것
const rel = /hey/;

작동 방법


RegExp.test(String)

String안에 RegExp가 포함되어 있는지 확인

re1.test('hey') // true
re1.test('blabla hey blabla') // true 

re1.test('he') // false
  • 만약 hey로 시작하는 문자열을 찾으려면 ^ 를 사용한다.
/^hey/.test('hey blabla') // true
/^hey/.test('blabla hey') // false
  • hey로 끝나는 문자열을 찾으려면 $를 사용한다.
/hey$/.test('sadkjfhdskjfhey') //true 
/hey$/.test('heyadsfklsdjlfk') // false
  • ^$를 합쳐서 사용하면 정확히 일치하는 문자열을 찾는다.
/^hey$/.test('hey') // true

범위의 항목 일치시키기

/[a-z]/ //a, b, c, ... , x, y, z
/[A-Z]/ //A, B, C, ... , X, Y, Z
/[a-c]/ //a, b, c
/[0-9]/ //0, 1, 2, 3, ... , 8, 9
  
/[A-Za-z0-9]/
/[A-Za-z0-9]/.test('a') // true
/[A-Za-z0-9]/.test('1') // true
/[A-Za-z0-9]/.test('A') // true 


/^[A-Za-z0-9]$/.test('a') // true
/^[A-Za-z0-9]$/.test('Aa') // false
/^[A-Za-z0-9]$/.test('1') // true
/^[A-Za-z0-9]$/.test('A1') // false
//^으로 시작하고 $끝나는 경우 문자열 범위에서 하나의 문자만 확인


/[^A-Za-z0-9]/.test('a') // false
/[^A-Za-z0-9]/.test('A') // false
/[^A-Za-z0-9]/.test('0') // false
/[^A-Za-z0-9]/.test('@') // true

//범위내에 ^이 들어가면 무효화 되므로 패턴 부정 

메타 문자

  • \d 모든 숫자와 일치합니다. [0-9]
  • \D 숫자가 아닌 모든 문자와 일치합니다. [^0-9]
  • \w 모든 영숫자 문자 (밑줄 더하기)와 일치하며 [A-Za-z_0-9]
  • \W 영숫자가 아닌 문자와 일치합니다. [^A-Za-z_0-9]
  • \s 공백, 탭, 줄 바꿈 및 유니 코드 공백과 같은 모든 공백 문자와 일치합니다.
  • \S 공백이 아닌 모든 문자와 일치
  • \0 null과 일치
  • \n 개행 문자와 일치
  • \t 탭 문자와 일치
  • \uXXXX코드가 XXXX 인 유니 코드 문자와 일치 ( u플래그 필요 )
  • .개행 문자가 아닌 문자 (예 :)와 일치합니다 \n( s플래그 를 사용하지 않는 한 , 나중에 설명 됨).
  • [^]개행 문자를 포함한 모든 문자와 일치합니다. 여러 줄 문자열에 유용합니다.

정규식 선택

  • 여러가지 문자열을 선택할 경우
/hey|ho/.test('hey') //true
/hey|ho/.test('ho') //true
/hey|ho/.test('hey ho') //true
  • 문자열에 한 자리만 있고 다른 것은 없는지 확인
/^\d$/.test('1') // true
/^\d$/.test('12') // false
  • 여러 자리를 확인하는 방법 (숫자로 시작해서 숫자로 끝나는데 자릿수는 상관없음)
// 하나 이상의 항목이 일치
/^\d+$/.test('1') //true
/^\d+$/.test('1231') //true
/^\d+$/.test('1a') //false
/^\d+$/.test('') //일치하는 항목이 1개 미만이므로 false


// 0개 이상의 항목이 일치
/^\d*$/.test('') //일치한 항목이 0개이지만 true
/^\d*$/.test('123') // true
/^\d*$/.test('1aaa') // false

//{n}은 n만큼의 길이 문자열 확인
/^\d{3}$/.test('123') // true
/^\d{3}$/.test('12') // false

//{n,m}은 길이가 n<= <= m인지 확인한다.
/^\d{3,5}$/.test('123') // true
/^\d{3,5}$/.test('12345') // true
/^\d{3,5}$/.test('12') // false
/^\d{3,5}$/.test('123456') // false

//위 코드에서 m을 삭제하면 최소 길이만 맞출 수 있다.
/^\d{3,}$/.test('123') // true
/^\d{3,}$/.test('123353453') // true
/^\d{3,}$/.test('12') // false
  • 괄호를 이용해 여러 문자 그룹 만들기
// 3자리 숫자 다음에 하나 이상의 영숫자 문자를 찾는다.
/^(\d{3})(\w+)$/.test('123sdjfhsajk') //true 
/^(\d{3})(\w+)$/.test('123') // false
          
//짝수 자리의 숫자를 찾는다.          
/^(\d{2})+$/.test('12') //true          
/^(\d{2})+$/.test('123') //false
/^(\d{2})+$/.test('1234') //true          
  • 그룹 캡쳐를 사용하면 일치하는 문자열을, 그 다음 각 조건에 일치하는 문자열을 배열로 반환한다.
    • String.match(RegExp)
    • RegExg.exec(String)
    • 찾을 수 없다면 null 반환
'123s'.match(/^(\d{3})(\w+)$/)
// Array ['123s', '123', 's']
(^(\d{3})(\w+)$).exec('123s')
// Array ['123s', '123', 's']
          
  • 선택 그룹을 사용하여 그룹을 선택적으로 만들 수 있다. 찾을 수 없는 경우 undefined가 배열에 포함된다.
/^(\d{3})(\s)?(\w+)$/.exec('123 s') //Array [ "123 s", "123", " ", "s" ]
/^(\d{3})(\s)?(\w+)$/.exec('123s') //Array [ "123s", "123", undefined, "s" ]
  • 그룹 캡쳐 시 이름을 부여할 수 있다.
const date = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
const result = data.exec('2015-01-02')

//result.groups.year === '2015'
//result.groups.month === '01'
//result.groups.day === '02'

정규식 사용하여 바꾸기

'Hello world'.replace(/world/, 'dog')// 'Hello dog'

// g플래그를 이용하여 여러 항목 대체하기 
'My dog is good dog'.replace(/dog/g, 'cat') // 'My cat is good cat'

// 그룹을 이용하여 문자열 위치 바꾸기 
'Hello, world!'.replace(/(\w+), (\w+)!/, '$2: $1!!!')//world: Hello!!!
  • 아래 사진처럼 함수를 이용할 수 있다.

  • 이메일 검사하기

'jing07161@gmail.com'.match(/(\S+)@(\S+)/)
// ["jing0716@gmail.com", "jing0716", "gmail.com", index: 0, input: "jing0716@gmail.com", groups: undefined]

(/(\S+)@(\S+)).exec('jing07161@gamil.com')
// ["jing07161@gmail.com", "jing07161", "gmail.com", index: 0, input: "jing07161@gmail.com", groups: undefined]

참고 사이트

profile
즐거운 코딩

0개의 댓글