5 분 소요

1. 정규 표현식의 문법

  • 텍스트에서 우리가 원하는 특정한 패턴을 찾을 때, 찾아서 처리할 때, 혹은 입력된 데이터의 유효성을 검사할 때 정규 표현식을 사용하면 유용하다!

  • 정규표현식 = 패턴 구분자 시작(/) + 작성할 패턴 + 패턴 구분자 끝(/) + 패턴 변경자(g 또는 gm)

  • 패턴 변경자(flag) : 1.3.7. 예시 참고!!

    • g(global): 매칭되는 다수의 결괏값을 기억함
    • m(multiline): 한 줄을 한 문장으로 인식함
  • 정규 표현식 테스트 사이트 : regexr.com/

1.1. 그룹, 레인지 (Groupes and Ranges)

Character Description
| 또는
() 그룹
[] 문자세트, 괄호 안의 어떤 문자든
[^] 부정 문자세트, 괄호 안의 어떤 문자가 아닐 때
(?:) 찾지만 기억하지는 않음
예시 )

1.1.1. < 일반적인 텍스트 검사하기 1 > hi

1.1.2. < 일반적인 텍스트 검사하기 2 > hello

1.1.3. < 버티컬바(|)를 이용하여 하나라도 매칭되는 텍스트 찾기 > hihello

1.1.4. < 소괄호를 이용하여 그룹 지정하기 > hihellogroup

1.1.5. < 여러 개의 소괄호를 이용하여 여러 그룹 지정하기 > hihelloandgroup → 마우스를 올리면 어느 그룹에 매칭되는 지 표시됨

1.1.6. < 소괄호와 버티컬바를 이용하여 grey 또는 gray 찾기 > greyorgray

1.1.7. < 물음표와 콜론을 이용하여, 찾지만 기억하지 않기 > greyorgraygroup greyorgraynogroup → 위(?:를 쓰지 않고 소괄호만 사용했을 때)에서는 그룹이 지정되지만, 아래에서는 그룹이 지정되지 않음. 소괄호를 텍스트를 찾는 도구로써만 사용하는 것.

1.1.8. < 소괄호와 버티컬바를 이용하여 grey 또는 gray 또는 grdy 찾기 > greyorgrayorgrdy

1.1.9. < 대괄호를 이용하여 grey 또는 gray 또는 grdy 찾기 1 > greyorgrayorgrdy2 → 대괄호 안의 어떤 문자든 들어 있기만 하면 찾음

1.1.10. < 대괄호를 이용하여 grey 또는 gray 또는 grdy 찾기 2 > greyorgrayorgrdy3 → 대괄호 안에 범위를 지정하여 찾는 방법 (gray, grby, grcy, grdy, grey가 모두 가능)

1.1.11. < 대괄호를 이용하여 다양한 집합체 만들어 보기 > wordset → ‘소문자 a부터 z까지, 대문자 A부터 Z까지, 숫자 0부터 9까지’라고 지정하여 찾음

1.1.12. < 꺽쇠(눈웃음)를 이용하여 ‘지정한 내용을 제외한 모든 것’을 찾아 보기 > wordsetneg → ‘소문자 a부터 z까지, 대문자 A부터 Z까지, 숫자 0부터 9까지’에 해당하지 않는 내용만 찾음

1.2. 수량 (Quantifiers)

Character Description
? 없거나 하나 있거나 (zero or one)
/* 없거나 하나 있거나 많거나 (zero or more)
+ 하나 또는 많이 (one or more)
{n} n번 반복
{min,} 최소
{min,max} 최소, 최대
예시 )

1.2.1. < 물음표를 이용하여 앞의 문자가 없거나 하나 있는 경우 찾기 > grayorgry → a가 하나 있거나(gray) 없는 경우(gry)를 찾음

1.2.2. < 별표를 이용하여 앞의 문자가 없거나 하나 있거나 많은 경우 찾기 > grayorgryorgraayorgraaay → a가 하나 있거나(gray) 없거나(gry) 많은 경우(graay, graaay)를 찾음

1.2.3. < 더하기를 이용하여 앞의 문자가 하나 있거나 많은 경우 찾기 > grayorgraayorgraaay → a가 하나 있거나(gray) 많은 경우(graay, graaay)를 찾음

1.2.4. < 중괄호를 이용하여 앞의 문자의 개수를 지정하여 찾기 > graay → a가 2개인 경우를 찾음

1.2.5. < 중괄호를 이용하여 앞의 문자의 최소 개수를 지정하여 찾기 > graayormore → a가 2개 이상인 경우를 찾음

1.2.6. < 중괄호를 이용하여 앞의 문자의 최소, 최대 개수를 지정하여 찾기 > grayminmax → a가 최소 1개 최대 3개인 경우를 찾음

1.3. 단어 경계 (Boundary-type)

Character Description
/b 단어 경계 (boundary)
/B 단어 경계가 아님
^ 문장의 시작
$ 문장의 끝
예시 )

1.3.1. < /b를 이용하여 단어 앞부분에서 쓰인 특정 문자열 찾기 > yaboundary → /b를 Ya 앞에 붙이면 단어의 앞부분에 쓰인 Ya만 찾음

1.3.2. < /B를 이용하여 단어 앞부분에서 쓰이지 않은 특정 문자열 찾기 > yanoboundary → /B를 Ya 앞에 붙이면 단어의 앞부분에 쓰이지 않은 Ya만 찾음

1.3.3. < /b를 이용하여 단어 뒷부분에서 쓰인 특정 문자열 찾기 > yaboundary2 → /b를 Ya 뒤에 붙이면 단어의 뒷부분에 쓰인 Ya만 찾음

1.3.4. < /B를 이용하여 단어 뒷부분에서 쓰이지 않은 특정 문자열 찾기 > yanoboundary2 → /B를 Ya 뒤에 붙이면 단어의 뒷부분에 쓰이지 않은 Ya만 찾음

1.3.5. < 꺽쇠(눈웃음)를 사용하여 문장의 시작 부분에서 쓰인 특정 문자열 찾기 > yacaret → ^를 Ya 앞에 붙이면 문장의 시작 부분에 쓰인 Ya만 찾음

1.3.6. < 달러를 사용하여 문장의 끝 부분에서 쓰인 특정 문자열 찾기 > yadollar → $를 Ya 뒤에 붙이면 문장의 끝 부분에 쓰인 Ya만 찾음

1.3.7. < flag g(global)과 gm(global & multiline)의 차이점 > yadollarglobal → multiline flag를 선택하지 않았을 경우(/Ya$/g), 글 전체를 한 문장으로 보기 때문에 Ya를 찾지 못함 yadollarglobal2 → 따라서, 글의 마지막에 Ya를 추가하면 찾는 것을 볼 수 있음 yadollarglobalmultiline → multiline flag를 선택했을 경우(/Ya$/gm), 각 줄을 문장으로 인식하기 때문에 세 번째 줄의 Ya와 마지막 줄의 Ya를 모두 찾음

1.4. 문자 (Character Classes)

Character Description
\ 특수문자가 아닌 문자
. 모든 글자 (줄바꿈 문자 제외)
/d 숫자 (digit)
/D 숫자 아님
/w 문자 (word)
/W 문자 아님
/s 공백 (space)
/S 공백 아님
예시 )

1.4.1. < 마침표를 사용하여 줄바꿈 문자를 제외한 모든 문자를 선택하기 > dot

1.4.2. < 역슬래시(\)를 사용하여 특수문자열 찾기 > dotspecialchar → 정규 표현식에서 기능하는 특수문자가 아닌, 텍스트로 사용된 특수문자를 찾고 싶을 때 \를 사용. (모든 문자를 선택하는 특수문자 마침표가 아니라, 텍스트에서 실제로 마침표로 사용된 것을 찾는 것) specialchar → 특수문자 하나 당 \ 하나씩 사용해야 함

1.4.3. < /d를 이용하여 숫자 찾기 > digit → 특수문자와 공백도 찾음

1.4.4. < /D를 이용하여 숫자가 아닌 모든 문자 찾기 > nodigit

1.4.5. < /w를 이용하여 모든 문자열 찾기 > word → 특수문자와 공백 제외

1.4.6. < /W를 이용하여 문자열을 제외한 모든 것 찾기 > noword → 특수문자와 공백도 찾음

1.4.7. < /s를 이용하여 공백 찾기 > space

1.4.8. < /S를 이용하여 공백을 제외한 모든 것 찾기> nospace

2. 정규 표현식 연습

exercise

2.1. 전화번호 찾기

phonenumber

2.2. 이메일 찾기

email → 최소 하나가 있으면서 많은 경우를 포함하기 위해 +를 사용

2.3. 유튜브 비디오 id 가져오기

videoid → 원하는 것은 세 번째 그룹인 비디오 아이디 부분이기 때문에 앞의 두 그룹은 ?:을 사용하여 ‘찾지만 기억하지 않음’

3. 자바스크립트에서의 활용 예시 (2.3. 심화)

  1. 콘솔 창에서 슬래시를 이용해 regex 변수에 정규 표현식을 할당함 regexinjs1

  2. url 변수에 유튜브 주소를 할당함 regexinjs2

  3. 해당 url에 원하는 정규표현식을 매칭하는 함수를 호출하면, 결괏값이 배열로 리턴됨. (비디오 id는 index 1에 해당하는 것을 볼 수 있음) regexinjs3

  4. result 변수에 매칭되는 결과를 할당함 regexinjs4

  5. result라는 배열의 index 1 데이터를 가져오면 비디오 id를 볼 수 있음 regexinjs5




콘솔 테스트 예시

// /apple/.test("apple")
// true

// /apple/.test("applq")
// false

// /a@a.com/.test("a@a.com")
// true

// /a@a.com/.test("b@a.com")
// false

// /\w@a.com/.test("sdfafdsfadfdsb@a.com")
// true

// /^\w@a.com$/.test("sdfafdsfadfdsb@a.com")
// false

// /^\w@a.com$/.test("w@a.com")
// true

// /^\w+@a.com$/.test("sdfsdfsdfsfsdfsdf@a.com")
// true

// /^\w?@a.com$/.test("@a.com")
// true

// /^\w?@a.com$/.test("d@a.com")
// true

// /^\w?@a.com$/.test("drrr@a.com")
// false

// /^\w*@a.com$/.test("@a.com")
// true

// /^\w*@a.com$/.test("e@a.com")
// true

// /^\w*@a.com$/.test("eeeeeee@a.com")
// true

// /^\w+@a.com$/.test("eeeeeee$a.com")
// false

// /^\w+@\w+.com$/.test("sdfs@dfd.com")
// true

// /^\w+@\w+.\w+$/.test("sdfs@dfd.net")
// true

// /^\w+@\w+.\w+$/.test("sdfs@dfd;.net")
// false

// /^\w+@\w+\.\w+$/.test("sdfs@dfd.net")
// true

// /^\w+@\w+.\w+$/.test("sdfs@dfd;.net")
// false

// /010-1234-5678/.test("010-1234-5678")
// true

// /^\d+-1234+-5678$/.test("01dfsf0-1234-5678")
// false

// /^\d+-1234+-5678$/.test("88787-1234-5678")
// true

// /^\d{3}-1234+-5678$/.test("88787-1234-5678")
// false

// /^\d{3}-1234+-5678$/.test("887-1234-5678")
// true

// /^\d{3}-\{3,4}-\d{4}$/.test("887-444-5678")
// false

// /^\d{3}-\d{3,4}-\d{4}$/.test("887-444-5678")
// true


📌 참고: 정규표현식 , 더이상 미루지 말자 🤩

댓글남기기