알고리즘
[알고리즘] 정규식(Regex)
취업 드가자잇
2024. 6. 9. 01:08
정규식(Regular Expression)은 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식이다.
코딩테스트 문제에서 문자열을 다뤄야할때 유용하게 쓰일 상황이 꽤 많을 것 같아 기록으로 남겨놓고자 한다.
특정한 패턴에 따라 문자열을 나눠야할때(Split)
1. 문자열에서 URL을 찾는 정규표현식
/(http|https|ftp|telnet|news|mms):\/\/[^\"'\s()]+/i
2. 프로그래머스 [3차] 파일명 정렬 문제에서 참고
const files = ["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"]
let answer = [];
files.forEach(file => {
let match = file.match(/^([a-zA-Z\s.-]+)(\d{1,5})(.*)$/);
if (match) {
answer.push({
head: match[1],
number: match[2],
tail: match[3],
original: file
});
}
});
대괄호 []: 대괄호 안의 문자 중 하나와 일치함을 의미
a-z: 소문자 영문자 a부터 z까지를 의미
A-Z: 대문자 영문자 A부터 Z까지를 의미
\s: 공백 문자를 의미. ( + 공백( ), 탭(\t), 줄 바꿈(\n), 캐리지 리턴(\r) )
+: 바로 앞의 표현식이 하나 이상 연속됨을 의미
(와 ): 괄호 안의 내용을 하나의 캡처 그룹으로 만듬
\d: 숫자 문자를 의미. 이는 [0-9]와 동일
{1,5}: 바로 앞의 표현식(여기서는 \d)이 1번 이상 5번 이하로 나타나는 패턴을 의미
*: 바로 앞의 표현식(여기서는 .)이 0번 이상 나타나는 패턴을 의미
$: 문자열의 끝을 의미
예제) 특정한 패턴에 따라 문자열을 조작
// 영문 소문자가 아닌 문자열을 나타내는 정규식
// 전역 플래그 'g'가 없을 경우 매칭되는 가장 첫번째 문자열을 의미
// ^의 경우 []밖에서는 시작을 의미, 하지만 []안에서는 부정을 의미
const regex = /[^a-z]/g;
str = str.replace(regex, '');
// 단 하나의 영문 소문자를 나타내는 정규식
const regex2 = /^[a-z]$/
// 정규식을 나타내는 리터럴 구문(`/ /`) 없이도 RegExp 객체를 통해 표현가능
const regex = new RegExp('^[a-z]+$');