정규표현식
문자열에서 특정 내용을 찾거나 대체, 발췌하는데 사용
- 각각 다른 포맷으로 저장된 전화번호 데이터 추출
- 사용자 입력 데이터가 올바른지 검증
- 해당 변수 이름 포함하고 있는 함수 제외하고 싶을 때
- 특정 조건, 위치에 따른 특수문자 제거하고 싶을 때
가독성이 좋지 않다.
/패턴/플래그
형식으로 구성
정규식 메서드
매칭 필터링을 위해 정규식 메서드를 통해 패턴 검사하여 문자열 추출
메서드 | 의미 |
---|
("문자열").match(/정규표현식/플래그) | 매칭되는 항목 배열로 반환 |
("문자열").replace(/정규표현식/, "대체문자열") | 매칭되는 항목 대체문자열로 반환 |
("문자열").split(정규표현식) | 매칭되는 항목 쪼개어 배열로 반환 |
(정규표현식).test("문자열") | 정규표현식과 문자열이 매칭되면 true, false 반환 |
(정규표현식).exec("문자열") | 무조건 첫 번째 매칭 결과만 반환 |
정규식 플래그
정규식 생성할 때 고급 검색을 위한 옵션 설정
플래그 | 의미 | 설명 |
---|
i | ignore Case | 대소문자 구별하지 않고 검색 |
g | global | 문자열 내 모든 패턴 검색 |
m | multiline | 여러줄 계속 검색 |
s | | 개행 문자도 포함하도록 |
u | unicode | 유니코드 전체 지원 |
y | sticky | 특정 위치에서 검색 진행하는 모드 활성화 |
일반 문자열
/hello/g
처음과 끝 ^,$
// 시작에 hello
/^hello/g
// 끝에에 hello
/hello$/g
// 처음과 끝 둘 다
/^hello$/g
모든 문자 매핑 .
/hello/g
/^h.llo$/g -> hello, hallo
/^h..llo$/g -> heallo
/hello..world/g -> "hello, world"
택1 []
/h[eao]llo/g -> 대괄호 안에 있는 텍스트 중 1개 택함
범위 -
범위를 지정하여 매칭하고 싶은 경우
/h[a-f]llo/g
/h[a-zA-Z]llo/g
부정 ^
해당 문자열을 제외하고 찾고 싶은 경우
/h[^ae]llo/g -> not 의미로 a,e가 아닌것 (hollo)
수량자 * + ? {}
해당 문자가 몇개 있는지 명시하여 패턴 검색
_* : 앞에 있는 문자가 0개 ~ N개 {0,}
_+ : 앞에 있는 문자가 1개 ~ N개 {1,}
_? : 앞에 있는 문자가 0개 ~ 1개 {0,1}
{3} : 3개
{3,} : 3개 이상
{1,3} : 1개 ~ 3개
캐릭터 클래스
자주 사용되는 문자 패턴을 캐릭터 클래스로 제공
/\w/gm : 워드
/\w{5} /gm : 5개의 글자와 스페이스 하나
/\W/gm : not 워드
/\d/gm : 숫자
/\D/gm : not 숫자
/\s/gm : 스페이스
/\S/gm : not 스페이스
이스케이프 문자
백슬러쉬를 이용하여 특수 문자를 표현
/\[.*]/gm : 대괄호([]) 안에 감싸여진 문자열
/\(.*\)/gm : 소괄호 안에 감싸여진 문자열
/\\.*\//gm : 이미 사용되고 있는 특수문자로 감싸여진 문자열
/-.*-/gm : 이스케이프 문자를 사용할 필요가 없는 경우
/\^\^/gm : 이스케이프 문자가 필요한 경우
/:\)/gm : 이스케이프 문자가 필요한 경우
/*
- `^` : 문자열의 시작
- `$` : 문자열의 종료. 옵션에 따라 문장의 끝 또는 문서의 끝에 매치된다.
- `.` : 임의의 한 문자
- `[]`: 문자 클래스. 문자 클래스 안에 들어가 있는 문자는 그 바깥에서 하나의 문자로 취급된다.
- `^` : 문자 클래스 내에서 ^는 not
- `-` : ex) a-z는 a에서 z까지의 문자
- `|` : or를 나타냄
- `?` : 앞 문자가 없거나 하나 있음
- `+` : 앞 문자가 하나 이상임
- `*` : 앞 문자가 0개 이상임
- `{n,m}` : 앞 문자가 `n`개 이상 `m`개 이하. `{0,1}` 은 `?`와 같은 의미다.
- `{n,}` : 앞 문자가 `n`개 이상. 위의 형태에서 `m`이 생략된 형태이다. `{0,}` 이면 `*`와 같고 `{1,}` 이면 `+`와 같은 의미이다.
- `{n}` : 앞 문자가 정확히 `n`개. `{n,n}` 과 같은 의미이다.
- `()` : 하나의 패턴구분자 안에 서브 패턴을 지정해서 사용할 경우 괄호로 묶어주는 방식을 사용한다.
- `\s` : 공백문자
- `\b` : 문자와 공백 사이를 의미한다.
- `\d` : 숫자 [0-9]와 같다.
- `\t` : 탭문자
- `\w` : 단어 영문자+숫자+_(밑줄) [0-9a-zA-Z_]문자 이스케이프는 대문자로 적으면 반대를 의미한다.
[a-z] : a ~ z 사이의 문자를 찾음
[1-9] : 1 ~ 9 사이의 문자를 찾음
[abc] : a, b, c중 하나를 찾음
[^abc] : a, b, c를 제외한 문자를 찾음
.z : 아무 문자 하나를 . 기호로 찾으며 z로 끝남을 의미
a+ : a가 1개 이상을 의미함
a* : a가 0개 또는 그 이상을 의미함
s : 공백 문자를 찾음(스페이스, 탭 등), 대문자의 경우 아닌 문자를 찾음
d : 숫자를 찾음, 대문자의 경우 아닌 문자를 찾음
w : 알파벳 영문과 숫자와 언더바 _ 기호를 찾음, 대문자의 경우 아닌 문자를 찾음
t : 탭 공간을 찾음
g : 검색범위를 전역으로 확장
i : 대소문자를 구분하지 않음
gi : 검색 범위를 전역으로 확대하면서 대소문자를 구분하지 않음
m : 여러줄을 동시에 매칭함
*/
Date()
let d = new Date();
getDate()
d.getDate(); 현지 시간 기준 일을 반환
1일 - 31일
getDay()
d.getDay();
0(일요일)부터 시작
getMonth()
d.getMonth();
현지 시간 기준 월(0 - 11)을 반환
-> d.getMonth()+1 해야함
getHours()
d.getHours()
현지 시간 기준 시 (0-23)을 반환
getMinutes()
d.getMinutes()
현지 시간 기준 분 (0-59)를 반환
getSeconds()
d.getSeconds()
현지 시간 기준 초(0-59)를 반환
getFullYear()
d.getFullYear()
현지 시간 기준 연도를 반환
예시
new Date(2023, 0, 21);
new Date('2023/1/20/10:00:00');
today = new Date('2023/1/20/10:00:00');
today.getTimezoneOffset();
today.toString();
today.toTimeString();
today.toLocaleString('ko-KR');
today.toLocaleString('en-US');
today.toLocaleString('ja-JP');