[자바스크립트] 정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코드)
정규 표현식 리터럴은 스크립트를 불러올 때 컴파일되므로, 바뀔 일이 없는 패턴의 경우 리터럴을 사용하면 성능이 향상될 수 있습니다.
const re = /ab+c/
RegExp 객체의 생성자 호출 : 생성자 함수를 사용하면 정규 표현식이 런타임에 컴파일됩니다. 바뀔 수 있는 패턴이나, 사용자 입력 등 외부 출처에서 가져오는 패턴의 경우 이렇게 사용.
const re = new RegExp('ab+c')
: 단순 패턴은 문자열을 있는 그대로 탐색할 때 사용
/abc/
==> 정확한 순서로 "abc" 라는 문자의 조합이 나타나는 부분과 일치. "ab c"는 일치하는 것이 아니다.
: 직접적인 일치 이상의 탐색이 필요할 때 사용 : 하나 이상의 "b"를 찾는다거나 공백 문자를 찾는 등...
()
패턴들을 하나의 그룹으로 묶음
+
기호 앞의 패턴이 1번 이상 발생하는 패턴, 꼭 나타나야함.
ex) ^\S+ 라면 (공백없는 텍스트로 시작하고, 한글자 이상의 길이)
?
기호 앞의 패턴이 없거나 1번 발생하는 패턴 -> 0번 or 1번
*
기호 앞의 패턴이 없거나 1번 이상 발생하는 패턴 -> 0번 or 1번 이상 가능
.
모든 문자를 가리킴(\과 개행은 제외)
^
문자열(패턴)이나 행의 처음을 의미
$
문자열 (패턴)이나 행의 종료를 알린다.
[]
[] 사이에 들어간 문자 중 하나를 매치
[0-9a-zA-Z] -> 0-9, 소문자, 대문자 중 하나를 매치함을 의미한다.
[^ ]
[]의 부정을 의미
\s
공백문자
\S
공백을 제외한 나머지 문자들 (공백 없는 텍스트 일 때 사용하게 된다.)
\w
"_"를 포함한, 영어와 숫자들
\W
"_"를 제외한, 영어와 숫자가 아닌 문자열들과 일치
\d
숫자를 일치시킨다.
[0-9]와 동일
\D
숫자가 아닌 모든 문자
{N}
정확히 N번 발생
{M,N}
최소 M번 이상, 최대 N번 이하로 발생하는 패턴
|
or연산을 의미한다. 예를 들어, (txt, doc)는 txt 또는 doc을 의미한다.
{N|M} -> N번 혹은 M번 발생
(?!)
대소문자를 구분하지 않음.
function solution(new_id) {
const answer = new_id
.toLowerCase() // 1
.replace(/[^\w-_.]/g, '') // 2
.replace(/\.+/g, '.') // 3
.replace(/^\.|\.$/g, '') // 4
.replace(/^$/, 'a') // 5
.slice(0, 15).replace(/\.$/, ''); // 6
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}
function solution(numbers, hand) {
hand = hand[0] === "r" ? "R" : "L"
let position = [1, 4, 4, 4, 3, 3, 3, 2, 2, 2]
let h = { L: [1, 1], R: [1, 1] }
return numbers.map(x => {
if (/[147]/.test(x)) {
h.L = [position[x], 1]
return "L"
}
if (/[369]/.test(x)) {
h.R = [position[x], 1]
return "R"
}
let distL = Math.abs(position[x] - h.L[0]) + h.L[1]
let distR = Math.abs(position[x] - h.R[0]) + h.R[1]
if (distL === distR) {
h[hand] = [position[x], 0]
return hand
}
if (distL < distR) {
h.L = [position[x], 0]
return "L"
}
h.R = [position[x], 0]
return "R"
}).join("")
}