javascript 정규식

이건선·2023년 6월 25일

알아볼것

목록 보기
12/13

정규 표현식 생성

  1. 리터럴 구문: /pattern/flags
  2. 생성자 함수: new RegExp(pattern, flags)

예:

let regex1 = /abc/g;  // 리터럴 구문
let regex2 = new RegExp('abc', 'g');  // 생성자 함수

정규 표현식 패턴

정규 표현식의 패턴은 다음과 같은 요소들로 구성될 수 있습니다:

  • 심플 문자열: 예) /apple/는 "apple" 문자열을 찾습니다.
  • 문자 집합: [abc]는 a, b, c 중 하나의 문자를 찾습니다.
  • 수량자: {m, n}는 m~n번 반복되는 문자/패턴을 찾습니다.
  • 그룹 및 참조: (abc)는 "abc"를 그룹으로 취급합니다.
  • 백슬래시 표현: \d는 숫자를, \w는 알파벳 문자를, \s는 공백을 찾습니다.
  • 특수 문자: . ^ $ * + ? = ! : | \ / ( ) [ ] { }
  1. .: 어떠한 문자와도 일치합니다 (단, 줄바꿈 문자를 제외한). 예를 들어, h.t는 "hat", "hit", "hot" 등과 일치합니다.

  2. ^: 문자열이나 줄의 시작을 나타냅니다. ^A는 "A"로 시작하는 모든 문자열에 일치합니다.

  3. $: 문자열이나 줄의 끝을 나타냅니다. A$는 "A"로 끝나는 모든 문자열에 일치합니다.

  4. *: 앞의 문자가 0회 이상 반복됨을 나타냅니다. a*는 "", "a", "aa", "aaa" 등과 일치합니다.

  5. +: 앞의 문자가 1회 이상 반복됨을 나타냅니다. a+는 "a", "aa", "aaa" 등과 일치합니다. (하지만 ""와는 일치하지 않습니다.)

  6. ?: 앞의 문자가 0회 또는 1회 등장함을 나타냅니다. a?는 "" 또는 "a"와 일치합니다.

  7. {n}: 앞의 문자가 정확히 n회 반복됨을 나타냅니다. a{3}는 "aaa"와 일치합니다.

  8. {n,}: 앞의 문자가 최소한 n회 반복됨을 나타냅니다. a{2,}는 "aa", "aaa", "aaaa" 등과 일치합니다.

  9. {n,m}: 앞의 문자가 최소 n회, 최대 m회 반복됨을 나타냅니다. a{2,3}는 "aa", "aaa"와 일치합니다.

  10. []: 대괄호 안의 어떠한 문자와도 일치합니다. [abc]는 "a", "b", "c" 중 어느 하나와 일치합니다.

  11. [^abc]: 대괄호 안의 문자를 제외한 모든 문자와 일치합니다. [^abc]는 "a", "b", "c"를 제외한 모든 문자와 일치합니다.

  12. |: 두 패턴 중 하나와 일치함을 나타냅니다 (OR 연산자). a|b는 "a" 또는 "b"와 일치합니다.

  13. (): 괄호 안의 문자를 하나의 단위로 취급합니다. 이를 이용해 그룹을 만들고, | 연산자와 함께 사용할 수 있습니다. 예를 들어, (abc|def)는 "abc" 또는 "def"와 일치합니다.

  14. \: 이스케이프 문자로,

    특수 문자를 문자 그대로 해석하게 합니다. 예를 들어, \.는 문자 "."와 일치합니다. 또한 특별한 시퀀스를 나타내기도 합니다 (예: \d는 모든 숫자와 일치).

정규 표현식 플래그

정규 표현식의 플래그는 다음과 같은 것들이 있습니다:

  • g: 전역 검색 (문자열 전체에서 패턴 찾기)
  • i: 대/소문자 무시
  • m: 여러 줄 모드
  • u: 유니코드 패턴을 사용하도록 지시
  • y: "sticky" 검색을 수행하도록 지시

정규 표현식 메서드

정규 표현식은 주로 다음과 같은 문자열 메서드와 함께 사용됩니다:

  • test(): 패턴이 문자열에 존재하는지 테스트하고, 참/거짓을 반환합니다.
  • match(): 문자열에서 패턴을 찾아 일치하는 항목을 반환합니다.
  • search(): 문자열에서 패턴을 찾고, 패턴의 시작 인덱스를 반환합니다.
  • replace(): 문자열에서 패턴을 찾아 다른 문자열로 교체합니다.
  • split(): 패턴을 사용하여 문자열을 분할합니다.

연습문제

  1. 연습문제: 전화번호 형식 (예: 123-456-7890 또는 123 456 7890 또는 1234567890)을 확인하는 정규식을 작성하세요.
let phone = "123-456-7890";
let phoneRegexp = /^\d{3}[-\s]?\d{3}[-\s]?\d{4}$/;
console.log(phoneRegexp.test(phone)); // 출력: true
  1. 연습문제: URL 형식을 확인하는 정규식을 작성하세요.
let url = "https://www.example.com";
let urlRegexp = /^(https?:\/\/)?(www\.)?([a-zA-Z0-9-])+(\.[a-z]{2,})+$/;
console.log(urlRegexp.test(url)); // 출력: true
  1. 연습문제: 사용자 이름이 4-12자의 알파벳과 숫자로만 구성되어 있는지 확인하는 정규식을 작성하세요.
let username = "username123";
let usernameRegexp = /^[a-zA-Z0-9]{4,12}$/;
console.log(usernameRegexp.test(username)); // 출력: true

해설

  1. /^\d{3}[-\s]?\d{3}[-\s]?\d{4}$/;
  • ^ : 문자열의 시작을 나타냅니다.
  • \d{3} : 연속한 세 개의 숫자를 찾습니다.
  • [-\s]? : 하이픈(-) 또는 공백 문자를 선택적으로 찾습니다.
  • \d{3} : 그 다음으로 연속한 세 개의 숫자를 찾습니다.
  • [-\s]? : 또 다시 하이픈(-) 또는 공백 문자를 선택적으로 찾습니다.
  • \d{4} : 마지막으로 연속한 네 개의 숫자를 찾습니다.
  • $ : 문자열의 끝을 나타냅니다.
  1. /^(https?:\/\/)?(www\.)?([a-zA-Z0-9-])+(\.[a-z]{2,})+$/;
  • ^ : 문자열의 시작을 나타냅니다.
  • (https?:\/\/)? : 'http://' 또는 'https://'를 선택적으로 찾습니다.
  • (www\.)? : 'www.'을 선택적으로 찾습니다.
  • ([a-zA-Z0-9-])+ : 알파벳, 숫자, 하이픈이 하나 이상 연속으로 나오는 패턴을 찾습니다. 이는 도메인 이름에 해당합니다.
  • (\.[a-z]{2,})+ : 점과 그 뒤에 연속한 두 개 이상의 소문자 알파벳이 하나 이상 있는 패턴을 찾습니다. 이는 최상위 도메인(TLD)에 해당합니다.
  • $ : 문자열의 끝을 나타냅니다.
  1. /^[a-zA-Z0-9]{4,12}$/;
  • ^ : 문자열의 시작을 나타냅니다.
  • [a-zA-Z0-9]{4,12} : 소문자 알파벳, 대문자 알파벳, 숫자가 4자 이상 12자 이하로 연속하는 패턴을 찾습니다.
  • $ : 문자열의 끝을 나타냅니다.
profile
멋지게 기록하자

0개의 댓글