✨정규식 표현 모음🧧

TATA·2023년 1월 22일
0

정규식표현

목록 보기
1/1

🧧 메타문자

^ : 문자열의 시작을 표현 (일치하더라도, 그 부분이 문자열의 시작 부분이 아니면 null을 리턴)
$ : 문자열의 종료를 표현 (일치하더라도, 그 부분이 문자열의 마지막 부분이 아니면 null을 리턴)
. : 1개 문자와 일치
? : 앞 문자가 있을 수도 없을 수도 있음 (?의 앞의 문자가 0번 혹은 1번 나타나는 경우만 검색)
+ : 앞 문자가 한번 이상 반복됨을 의미 (+의 바로 앞의 문자가 1번 이상 나타나는 경우를 검색)
* : 앞 문자가 0번 또는 그 이상 반복됨을 의미 (* 의 바로 앞의 문자가 0번 이상 나타나는 경우를 검색)
| : or 를 표현. 앞 문자나 뒷 문자가 존재함을 의미
() : 그룹을 표현. ()안에 있는 글자를 그룹으로 처리함을 의미
()() : 그룹들의 집합을 표현. 앞부터 순서대로 번호를 부여하여 관리하고 ()안에 있는 글자는 각 그룹의 데이터로 관리
(?:) : 그룹은 만들지만 캡처는 하지 않음
()(?:) : 그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미
{n} : 앞 문자가 n개 이상있음
{n,m}, {n, } : 앞 문자가 n개 이상 (m개 이하)
[] : 이 속에 있는 거 하나라도 있으면 매칭, [abc][a-z] [0-9] 등
[^ ] : 해당 조건 문자 제외하고 매칭


🧧   \  

\w : 언더바를 포함한 영어 알파벳, 숫자를 포함. [0-9a-zA-Z_]와 같은 문법.
\W : \w가 아닌 것
\d : 숫자, [0-9]와 같은 문법
\D : \d가 아닌 것
\s : 공백문자
\S : \s가 아닌 것
\n : (n은 1에서 9까지의 정수 [1-9])정규식 안 n번 괄호(그룹)의 최근 일치 부분(역참조)과 같음.
          일치하는 n번째 패턴 -> 일치하는 패턴 중 n번째를 선택한다.


🧧 / 플래그

/i : 대소문자 구분 없이 찾음
/g : Global의 표현. 검색된 모든 결과를 리턴함(중복 글자여도 모두 리턴)
/m : 주어진 문자열에 줄바꿈이 있을 경우, 여러 줄로 취급하여 찾음(m앞에 g를 붙이지 않으면, 찾는 순간 검색을 멈춤)
/gm : 주어진 문자열에 줄바꿈이 있을 경우, 여러 줄로 취급하여 찾음(첫 줄에서 찾아도 멈추지 않고 다음 줄로 넘어감)
/y : 현재 위치부터 검색


🧧 전후방 탐색

(?= ) : 전방탐색이며, = 다음에 오는 문자부터 일치하는 영역에서 제외
(?<= ) : 후방탐색이며, = 다음에 오는 문자부터 일치 영역

(?!) : (?= )의 부정


🧧 모든 문자를 선택하는 기호

.* : 모든 문자를 선택한다.

a.*e
// a로 시작되고 e로 끝나는 단어를 선택한다.
// (a와 e 사이에 무엇이 있든 상관 없음)

.*
// 모든 텍스트가 다 선택된다.

  
// 만약 *이 없다면?🤔
.
// 딱 한개의 아무 문자나 매치된다.

🧧 정규식을 이용한 문자열 검색

Method

exec() : execution의 줄임말로, 원하는 정보를 뽑아내고자 할 때 사용한다.
test() : 주어진 문자열이 정규 표현식을 만족하는지 팔별하고, 그 여부를 true 혹은 false로 반환한다.
match() : 문자열의 처음부터 정규식과 매치되는지 조사한다.
search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.
findall() : 정규식과 매치되는 모든 문자열(substring)을 리스트로 리턴한다.
finditer() : 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 리턴한다.
replace() : 검색 후 바꾸기를 수행
split() : 주어진 인자를 구분자로 삼아, 문자열을 부분 문자열로 나누어 그 결과를 배열로 반환

정규식표현.exec(str) //  정규표현식에 해당하는 문자이면 배열로 반환하며, 찾는 문자열이 없다면 null을 리턴
정규식표현.test(str) // 정규표현식에 해당하는 문자인지를 boolean 으로 리턴
str.match(정규표현식) // 정규표현식에 해당하는 문자이면 배열로 반환하며, 찾는 문자열이 없다면 null을 리턴
str.search(정규표현식) //정규표현식에 해당하는 문자가 몇번째 index에 있는지, 없으면 -1을 반환
str.replace(정규표현식, 'T') // str 안에서 정규표현식을 검색한 후 'T 로 변경하여 그 결과를 리턴
"12304560789".split('0') // ["123", "456", "789"]

🧧 자바스크립트에서 사용 예시

/* 문자열을 입력받아 아이소그램인지 여부를 리턴해야 한다.
아이소그램(isogram)은 각 알파벳을 한번씩만 이용해서 만든 단어나 문구를 말한다. */

function isogram(str) {
  return !/(\w).*\1/i.test(str);
  // 아래 코드로 해도 true가 나온다.
  // return !str.match(/([a-z]).*\1/i);
}

console.log(isogram("abc")); // true

---------------------
// 문자열 str 이 주어질 때, str의 길이가 5 또는 7이면서
// 숫자(0~9)로만 구성되어 있는지를 확인해 주는 함수
function solution(str) {
    return /^\d{5}$|^\d{7}$/.test(str);
}

이메일 유효성 검사

const email = 'tata111@velog.com';
let result = '올바릅니다.';

// 1. 정규표현식 사용
let regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;

if(regExp.test(email) === false) result = '올바르지 않습니다.';
result; // '올바르지 않습니다.'

-----------------------------------------------------------------------------

// 2. 정규표현식이 아닌 경우, 이메일 아이디가 영문 소문자인지 확인하는 코드
let idx = email.indexOf('@');
if(idx === -1) result = '영문 소문자가 아닙니다.';

let ID = email.slice(0,idx);

ID.split('').forEach(e => {
	e = e.charCodeAt(0);
	if(e < 97 || e > 122){
	result = '영문 소문자가 아닙니다.';
	}
});

result; // '올바릅니다.'

휴대전화 번호 유효성 검사

let regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;

간단한 것들만 표로 정리

정규식 패턴설명
^줄(Line)의 시작에서 일치 /^abc/
$줄(Line)의 끝에서 일치 /xyz$/
.(특수기호, 띄어쓰기를 포함한) 임의의 한 문자
a | ba or b 와 일치, 인덱스가 작은 것을 우선 반환
*0회 이상 연속으로 반복되는 문자와 가능한 많이 일치. {0,} 와 동일
*?0회 이상 연속으로 반복되는 문자와 가능한 적게 일치. {0} 와 동일
+1회 이상 연속으로 반복되는 문자와 가능한 많이 일치. {1,} 와 동일
+?1회 이상 연속으로 반복되는 문자와 가능한 적게 일치. {1} 와 동일
{3}숫자 3개 연속 일치
{3,}3개 이상 연속 일치
{3, 5}3개 이상 5개 이하 연속 일치
()캡쳐(capture)할 그룹
[a-z]a부터 z 사이의 문자 구간에 일치(영어 소문자)
[A-Z]A부터 Z 사이의 문자 구간에 일치(영어 대문자)
[0-9]0부터 9 사이의 문자 구간에 일치(숫자)
\(역슬래시)escape 문자. 특수 기호 앞에 \를 붙이면 정규식 패턴이 아닌, 기호 자체로 인식
\d숫자를 검색함. /[0-9]/와 동일
\D숫자가 아닌 문자를 검색함. /[^0-9]/와 동일
\w영어대소문자, 숫자, (underscore)를 검색함. /[A-Za-z0-9]/ 와 동일
\W영어대소문자, 숫자, (underscore)가 아닌 문자를 검색함. /[^A-Za-z0-9]/ 와 동일
[^][]안의 문자열 앞에 ^이 쓰이면, []안에 없는 문자를 검색함
// 닉네임 유효성 검사
/^(?=.*[a-zA-Z0-9-])[a-zA-Z0-9-]{2,10}$/

// 이메일 유효성 검사
/^\S+@\S+$/i

// 비밀번호 유효성 검사
/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,25}$/





Regexr
정규식표현 정리된 블로그1 2 3 4 5
정규식표현 정리된 사이트 전후방탐색 블로그

profile
🌿 https://www.tatahyeonv.com

0개의 댓글