정규식 팁

  • 정규식 규칙 사용했던 방식을 간단 정리

정규식을 쉽게 만들고 확인하는 사이트

정규식 수행(js기준)

let regex = //정규식 작성
let input = //입력

regex.exec(input)//정규식 수행1
regex.test(input)//정규식 수행 - 매치되는게 있으면 true, 아니면 false로 출력해준다.
input.match(regex)//정규식 수행2
   //둘이 출력이 약간 다름 익숙한거로 통일해서 쓰는게 정신건강에 좋을듯...

1. 그룹화

  • 괄호를 통해 그룹화를 진행
  • 작성된 정규식을 통해 매칭된 결과에 다시 분리한 결과를 받아 볼 수 있음
    • ex)정규식 - 해당 정규식에 맞는 결과만 나옴
    • ex)(정규식1)(정규식2)(정규식2) - 정규식1정규식2정규식3에 맞는 결과를 결과[1]=정규식1의 결과, 결과[2]=정규식2의결과, 결과[3]은 정규식3의 결과로 바로 분리된 결과를 얻을 수 있음
    • ex)/([a-zA-Z-_ .]+)([0-9]+)(.*)/
      • 문자가 먼저나오고 숫자가 하나이상 존재한 문장을 찾고, [문자,숫자,나머지]와 같은 결과를 바로 얻을 수 있다.

2. 특정 문장이 포함되는 경우

  • 정규식에 정규식만 들어가지않고 알고싶은 특정 단어를 섞어 쓰는게 가능.
    • ex)/<a href="(\S+)">/
      • a태그의 href속성 부분을 정규식으로 작성하여 해당 태그 사이의 값을 return하게 된다.

3. 결과 여러개 출력

  • 정규식의 결과를 연속으로 처리하고 싶다!
//match의 경우
let regex = /(\d+)/g //뒤에 g 옵션이 있으면 매칭되는 결과를 모두  볼수있다.
let result = str.match(regex)//result는 정규식 결과들을 모두 가진다.

//exec로 사용할경우
   //regex.exec(str)는 g옵션이 있어도 결과는 첫번재것만 보여준다.
   //여러 결과를 보기 위해서는 아래처럼 lastindex 포인터를 증가하는 식으로  확인한다.
   //regex101에서 codegenerat하면 아래처럼 바로 뽑아준다.
while ((m = regex.exec(str)) !== null) {//g옵션없이 하면 계속반복됨...
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // 매칭된 결과 뿐만 아니라 매칭된 결과의 그룹들을 출력 가능하다. 
    //괄호로 나눈것들
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

4. 그냥 확인만 하고싶다.

  • 비밀번호의 규칙같은 경우 그냥 규칙에 부합한지만 보고싶을때
//match의 경우
let regex = /^[A-Za-z0-9!@#$%^&*]{8,16}$/g 
//영대,소문자, 숫자, 특문!@#$%^&*만 , 9글자 16글자만 

if(!regex.test(input)){
   //test로 작동시키면 부합하면 true, 아니면 false가 출력된다.
   alert("비밀번호 확인")
}