[JavaScript] 정규표현식, 너 혹시 뭐 돼?

hyeonbin·2023년 4월 27일
0

JS 계란반 스터디

목록 보기
8/12
post-thumbnail

📖 정규표현식

🔉 정규표현식이란?

  • 문자열에서 특정 문자 조합을 찾기 위한 패턴으로 사용된다.
  • 로그인 및 회원가입 등의 이메일, 전화번호 등 옳지 않은 값을 입력하면 정규표현식에 의해 필터링되며 경고 문구나 경고창이 나타난다.
  • 주석, 공백을 허용하지 않고 여러가지 기호를 혼합해서 사용하기에 가독성이 좋지 않다.


🔉 정규표현식 생성 방식

1. 리터럴 표기법

  • 패턴 ( pettern )플래그 ( flag ) 로 구성된다.
  • 일반적으로 리터럴 표기법을 사용한다.
  • 리터럴은 데이터 그 자체를 뜻하며 변수에 넣는 변하지 않는 데이터를 의미한다.
  • 상수와는 다른 의미이다.
    → 상수는 변하지 않는 변수를 의미 ( 메모리 위치 )
    → 리터럴은 변수의 값이 변하지 않는 데이터를 의미 ( 메모리 위치안에 값 )

2. 생성자 함수 방식

  • 생성자 함수를 호출하여 RegExp 객체를 생성할 수 있다.

3. 재할당 방식

  • 사용중인 정규 표현식을 재할당할 수 있다. ( 단, 상수가 아닌 변수로 선언 )


🔉 정규식 플래그

  • 선택적으로 사용한다.
  • 고급 검색을 위한 전역 옵션을 설정할 수 있도록 지원하는 깅이다.
  • 플래그를 사용하지 않으면 문자열 내 검색 매칭 대상이 1개 이상이더라도 첫번째 매칭한 대상만을 검색하고 종료한다.


g : 전역 검색

// `n`이 두 개 포함된 문자열
const str = 'one two three four five six seven eight nine ten';

// `g` 플래그 없이는 최초에 발견된 문자 한번만 반환
const isMatch = str.match(/n/); 
console.log(isMatch);
/*
[ 
'n', 
index: 1, 
input: 'one two three four five six seven eight nine ten', 
groups: undefined 
]
*/


// `g` 플래그가 있으면 모든 결과가 배열로 반환
const isFlag = str.match(/n/g); 
console.log(isFlag); // [ 'n', 'n', 'n', 'n', 'n' ]

m : 전역 검색

// 여러 줄의 문자열에서 필터링 해야 될때 사용
// 줄바꿈이 포함된 3줄 문자열
const str2 = 'one two three~~\nfour five six??\nfour seven eight nine ten!!';
console.log(str2);
/* 
one two three~~
four five six??
four seven eight nine ten!! 
*/

// one 단어로 시작하는지 검사 (^ 문자는 문장 시작점을 의미)
const isM = str2.match(/^one/);
// → 첫번째 줄은 잘 찾음
console.log(isM); // ["one"]

// Power 단어로 시작하는지 검사
const isM2 = str2.match(/^four/);
// → 그러나 그 다음 줄은 검색되지 않음
console.log(isM2); // null

// 따라서 m 플래그를 통해 개행되는 다음 줄도 검색되게 설정
const isM3 = str2.match(/^four/m);
console.log(isM3); // ['four']

// 세번째 줄도 검색되게 하고싶으면 g 플래그와 혼합 사용
const isM4 = str2.match(/^four/gm);
console.log(isM4); // [ 'four', 'four' ]

i : 대소문자 구분 없음

// 정규식은 기본적으로 대소문자를 구분
// 대신 i 플래그를 통해 대소문자 구분 하지 않을 수 있음
const str3 = 'abcABCabcABCdefgDEFGdefgDEFG';

// 대소문자 a 검색
const isI = str3.match(/g/gi);
console.log(isI); // [ 'g', 'G', 'g', 'G' ]


🔉 정규식 기호

1. 특정 문자 숫자 매칭 패턴


2. 그룹 패턴


3. 그 외 패턴



🔉 정규식 메서드


메서드 예제

// 정규표현식을 담은 변수
const regex = /seven/; // seven 이라는 단어가 있는지 필터링

const txt = 'one two three four five six seven eight nine ten';

// "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
const isMatch = regex.test(txt);
console.log(isMatch); // true

// "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환
const isMatch2 = txt.match(regex);
console.log(isMatch2); // ['seven']

// "문자열"을 "정규표현식"에 매칭되는 항목으로 쪼개어 배열로 반환
const isMatch3 = txt.split(regex);
console.log(isMatch3); // [ 'one two three four five six ', ' eight nine ten' ]

// "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
const isMatch4 = txt.replace(regex, 'heaven');
console.log(isMatch4); // 'one two three four five six heaven eight nine ten'

// match 메서드와 유사 (단, 무조건 첫번째 매칭 결과만 반환)
const isMatch5 = regex.exec(txt);
console.log(isMatch5); // ['seven']


🔉 자주 사용되는 정규표현식


정규표현식 연습 사이트

1. https://regex101.com/
2. https://regexr.com/
profile
할 수 있다고 믿는 사람은 결국 그렇게 된다 😄😊

0개의 댓글