- 회원가입, URI 파싱 등 웹 프로그래밍에서 정보 추출을 도와주는 정규 표현식은 무엇이며 어떻게 사용하는 걸까?
문자열에 나타나는 특정 문자를 검색(search)하고 대체(replace)하고 추출(extract)하기 위해 사용되는 패턴 (MDN)
JS에서 정규 표현식 또한 객체이다.
const regexp1 = /simply/;
const sampleString =
'Lorem Ipsum is simply dummy text of the printing and typesetting industry.';
const regexp1 = /simply/;
console.log(sampleString.match(regexp1));
// 'simply',
// index: 15,
// input: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.',
// groups: undefined
RegExp
생성자 함수 방식
const regexp1 = new RegExp('dummy');
const sampleString =
'Lorem Ipsum is simply dummy text of the printing and typesetting industry.';
const regexp1 = new RegExp('dummy');
console.log(sampleString.match(regexp1));
// 'dummy',
// index: 22,
// input: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.',
// groups: undefined
test
: 일치 여부 반환match
: 일치하는 문자열 반환search
: 일치하는 문자열의 인덱스 반환replace
: 대체된 문자열 반환g
: 모든 문자 일치 (global)i
: 영어 대소문자 구분 X (ignore case)m
: 멀티라인에 대해 검색 (multi line)/^ab/
: 줄 시작에 있는 ab
와 일치/ab&/
: 줄 끝에 있는 ab
와 일치/./
: 임의의 한 문자와 일치/a|b/
: a 또는 b와 일치/ab?/
: b가 없거나 b와 일치/{3}/
: 3개 연속 일치/{3,}/
: 3개 이상 연속 일치/{3,5}/
: 3개 이상 5개 이하 연속 일치/[abc]/
: a 또는 b 또는 c/\w/
: 대소문자 + 숫자 + _
/\b/
: 문자 경계\d
: 숫자\s
: 공백에 일치(?=)
: 앞 쪽 일치 부분 검색(?<=)
: 뒤 쪽 일치 부분 검색알파벳, 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거하기
Regex :
/[^\w-.]/g, ''
Input :...!@bat#*..y.abcdefghijklm
Output :...bat..y.abcdefghijklm
마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환하기
Regex :
/\.{2,}/g, '.'
Input :...bat..y.abcdefghijklm
Output :.bat.y.abcdefghijklm
마침표(.)가 처음이나 끝에 위치한다면 제거하기
Regex :
/^\.|\.$/g, ''
Input :.bat.y.abcdefghijklm
Output :bat.y.abcdefghijklm
빈 문자열에, 문자 "a"를 추가하기
Regex :
/^$/g, 'a'
Input :''
Output :a
// 2. 신규 아이디 추천
// 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
// 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
// 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
// 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
// 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
// 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
// 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
// 7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
function solution(newId) {
return newId
.toLowerCase() // 1단계
.replace(/[^\w-.]/g, '') // 2단계 ; \w -> (알파벳 + 숫자 + _)
.replace(/\.{2,}/g, '.') // 3단계
.replace(/^\.|\.$/g, '') // 4단계
.replace(/^$/g, 'a') // 5단계
.slice(0, 15) // 6단계(1)
.replace(/^\.|\.$/g, '') // 6단계(2)
.replace(
/^.{1,2}$/g,
match => match + match[match.length - 1].repeat(3 - match.length) // 7단계
);
}