블록체인 sw개발자

정규표현식이란

sang969 2023. 7. 21. 11:35

정규표현식

-특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어이다.

정규표현식을 이용하면, 특정 패턴에 매칭되는 문자열을 쉽게(?) 찾아낼 수 있습니다.

 

예를 들어 010-1111-2222 라는 전호번호는

"숫자3개", "-", "숫자4개", "-", "숫자4개" 로 이루어져 있는데,

 

정규표현식으로 아래와 같이 패턴을 만들어주면,

특정 문자열이 해당 패턴에 맞는지 체크할 수 있습니다.

 

const regex = /\d{3}-\d{4}-\d{4}/;
// (\d는 숫자를 의미하고, {} 안의 숫자는 갯수를 의미한다.)

regex.test('010-1111-2222') // true;
regex.test('01-11-22') // false;
const text = "안녕하세요 제 번호는 010-1111-2222 입니다. call me~!";
text.match(/\d{3}-\d{4}-\d{4}/); // 010-1111-2222

 

정규표현식 사용

1. 정규표현식 형식

/패턴/플래그

  • 슬래시(/) "사이"에는 매칭시킬 "패턴"을 써준다.
  • 슬래시(/) "다음"에는 옵션을 설정하는 "플래그"를 써준다.

(플래그는 하나만 찾을지, 모두 다 찾을지 등을 설정하는 옵션이라고 보면 됩니다.)

 const reg1 = /정규표현식/;
      const reg2 = new RegExp("정규표현식");
      console.log(
        "저는 정규표현식 을 사용하고 있습니다.".replace(reg1, "정규식")
      ); //replace 바꾸다, match 매칭시키다.
      // ['9','3','3','6','3','6']

      const three = /[3,6,9]/g; //global 전체를 뒤져라 []뛰어쓰기 쓸 필요가 없다
      console.log("945336484436".match(three));
      const korean = /[가-힣]/;
      console.log('korean.exec("뷁")');
      // korean.exec("뷁")

      const infoReg = /^i'm/i; // i 대소문자 구분이 없다
      //g랑 같이 써도된다 (^)는 해당 문자열이 앞에 시작하는가
      console.log(infoReg.test("영어로 I'm 박상현"));
      //false

      const plusReg = /a+/gi; //a+ 하나라도 붙어있는걸 가져온다
      console.log(plusReg.exec("abrewfeAwfgaaggeakjaaaaa".match(plusReg)));
      // ['a', index: 0, input: 'a,A,aa,a,aaaaa', groups: undefined]

      const questionReg = /a?/g; //다 찾는다
      console.log("abrewfeAwfgaaggeakjaaaaa".match(questionReg));
      // (25) ['a', '', '', '', '', '', '', '', '', '', '', 'a', 'a', '', '', '', 'a', '', '', 'a', 'a', 'a', 'a', 'a', '']

      const starReg = /a*/g;
      console.log("abrewfeAwfgaaggeakjaaaaa".match(starReg));
      // (20) ['a', '', '', '', '', '', '', '', '', '', '', 'aa', '', '', '', 'a', '', '', 'aaaaa', '']

      const endReg = new RegExp("A$", "ig");
      console.log("abrewfeAwfgaaggeakjaaaaa".match(endReg));
      // ['a']

      const countReg = /[a-z]{5}/; //{5}는 글자수 {최소, 최대}
      console.log("asdfd".match(countReg));
      // ['asdfd', index: 0, input: 'asdfd', groups: undefined]

      const countReg1 = /[a-z]{5, 10}/;
      console.log("asdfghjklo".match(countReg1));
      // null

      const nummberReg = /\d+.[0-9]+/g;
      console.log("asdgefg12.r333".match(nummberReg));
      // ['333']

      const nummberReg1 = /\D+.[0-9]+/g; //D는 문자를 찾는다
      console.log("asdgefg12.r333".match(nummberReg1));
      // (2) ['asdgefg12', '.r333']

      const strReg = /\w+/; //대문자 숫자 언더바를 찾는다
      console.log("asdgefg12.r3_33".match(strReg));
      // ['asdgefg12', index: 0, input: 'asdgefg12.r3_33', groups: undefined]
      const strReg1 = /\W+/;
      console.log("asdge안녕fg12.r3_33".match(strReg1));
      // ['안녕', index: 5, input: 'asdge안녕fg12.r3_33', groups: undefined]
      const spaceReg = /\s+/;
      console.log("ser asdr gee 31rj".match(spaceReg));
      // [' ', index: 3, input: 'ser asdr gee 31rj', groups: undefined]

전화번호 정규 표현

: 유선번호라면 02-111-2222 형식이고, 핸드폰번호라면 010-1111-2222 형식입니다. 숫자의 갯수가 다릅니다.

const text = `대나무 빨대 구입 문의 : http://dogumaster.com 
http://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`;

text.match(/\d{2,3}-\d{3,4}-\d{4}/g);
// [ '010-1111-2222', '02-333-7777' ]

/\d{2,3}-\d{3,4}-\d{4}/g

1) \d{2,3} => 숫자 2~3개로 시작하고,

2) \- => 다음에 하이픈(-)이 오고

3) \d{3, 4} => 다음에 숫자가 3~4개 오고,

4)  \- => 다음에 하이픈(-)이 오고,

5) \d{4} => 다음에 숫자가 4개 온다.

6) g => 매칭되는걸 모두 다 찾는다(플래그)