updated 06/28/23
오늘은 정규식의 날이었다
정규식이 나를 애먹였지만 덕분에 생동감있게 배웠다.
아래 내용은 내가 편하게 이해하려고 정리해놓은 규칙들이다. 서서히 늘려나갈 계획이다.
JavaScript - 정규식 Regular expression
💡 기본 규칙
/ _____ / 일단 정규식은 요런 형식을 사용한다. 슬래시로 감싸진 형태이다.
/ _____ / g 전체 문자열을 몽땅 검색한다
/ _____ / i 대소문자를 구분하지 않는다
/ _____ / gi 전체 문자열 몽땅 검색 + 대소문자를 가리지 않는다
/ ^[0-9] / 여기서 ^ 는 시작을 의미한다. → 한마디로 0-9 인 숫자로 시작되는 문자를 의미한다.
/ [^0-9] / 괄호 안의 ^ 는 not 을 의미한다. → 한마디로 0-9 까지 숫자 제외한 나머지 문자들
/ ^\d*[.]\d{2}$ / 여기서 $ 는 종료를 의미한다.
💡 그룹핑하기
- 대괄호 [ ]
대괄호는 범위를 의미한다.
/ [a-z] / [ ] 괄호안에 있는 애들은 그 범위 내의 문자 중 아무거나를 의미한다. a ~ z 사이의 문자들
/ [abc] / a, b, c중 하나를 찾음
/ [^abc] / 문자열도 마찬가지이다. a, b, c를 뺀 나머지 문자를 찾음
- 중괄호 { }
/ HEL{2}O / 중괄호의 숫자만큼 n번 반복 검색을 한다. (HELLO 로 L이 두번 들어간 단어에 매칭)
{2, 3} 이면 2 - 3 번만큼 반복 검색을 한다. (HELLO, HELLLO)
- 소괄호 ( )
소괄호는 그룹을 의미한다.
/ (Hi | Hello) | (Bye) / (Hi | Hello) 가 그룹1 이고 (Bye | GoodBye) 는 그룹2 이다.
/ (?: Hi | Hello) / 물음표(?:)를 덧붙이면 찾긴 하지만 그룹으로 기억하지는 않는다.
💡 단어 나타내기
대문자는 제외를 의미하는 것 같다,
/ \w / 알파벳이랑 숫자를 의미한다. [a-zA-Z0-9] 요거랑 같은 의미 !
/ \W / 알파벳이나 숫자를 제외한 나머지 문자들 (참 쉽죠잉)
/ \d / 얘는 숫자를 의미한다. [0-9] 요거랑 같은 의미 !
/ \D / 얘는 숫자 제외한 나머지를 의미
/ ___? / 물음표는 얘 앞에 있는 문자가 없을수도 있을수도 있음을 의미한다 (optional)
/ ___* / 별표는 얘 앞에 있는 문자 갯수가 0 ~ 이상을 의미한다.
/ ___+ / 플러스는 1개 이상을 위미한다.
/ \b__ / 얘는 단어 - 단어 사이 경계를 의미한다.
\bHello 이면 Hello 로 시작하는단어를 찾고 Hello\b 이면 Hello로 끝나는 단어를 찾는다.
/ \B__ / 얘는 \b 의 반대!
/ \s / 공백을 의미
💡 역슬래쉬 어택 (excaping)
\ __ 역슬래쉬 뒤에 따라오는 애는 문자 그대로 취급한다.
ex) \d는 숫자를 의미한다. 그런데 앞에 역슬래쉬가 붙어 \\d 면 그냥 JUST 알파벳 d 로 받아들인다.
💡 기호
? 없거나 있거나 ex) /gr?ay/g → gray gry
* 없거나 있거나 많거나 ex) /gr*ay/g → gray gry graay graaay
💡 정규식 관련 함수
주로 많이 사용해본 함수들 중심으로 정리해보았다.
test()
문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환한다.
var testString = "12안녕.34Test!5?67,8H9i0"; // 원래 문자열
var regex = /[^0-9]/g; // 숫자가 아닌 문자열을 매칭하는 정규식
var result = regex.test(testString); // 원래 문자열에서 숫자가 아닌 문자열이 있는지 확인
console.log(result); // true
replace(문자열 or 정규식, "바꿀 문자열")
문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 바꾼다.
var testString = "12안녕.34Test!5?67,8H9i0"; // 원래 문자열
var regex = /[^0-9]/g; // 숫자가 아닌 문자열을 매칭하는 정규식
var result = testString.replace(regex, ""); // 원래 문자열에서 숫자가 아닌 모든 문자열을 빈 문자로 변경
console.log(result); // 1234567890
replaceAll(문자열 or 정규식, "바꿀 문자열")
문자열에서 일치하는 부분을 모두 탐색하고, 모두 대체 문자열로 바꾼다.
var testString = "12안녕.34Test!5?67,8H9i0"; // 원래 문자열
var regex = /[^0-9]/g; // 숫자가 아닌 문자열을 매칭하는 정규식
var result = testString.replaceAll(regex, ""); // 원래 문자열에서 숫자가 아닌 모든 문자열을 빈 문자로 변경
console.log(result); // 1234567890
match()
정규식에 통과한 모든 문자열은 배열로 저장한다. 그래서 몇개가 있는지 확인도 가능하다.
var testString = "12안녕.34Test!5?67,8H9i0"; // 원래 문자열
var regex = /[^0-9]/g; // 숫자가 아닌 문자열을 매칭하는 정규식
var result = testString.match(regex); // 원래 문자열에서 숫자가 아닌 모든 문자열을 배열로 출력
console.log(result); // ['안', '녕', '.', 'T', 'e', 's', 't', '!', '?', ',', 'H', 'i']
** 요거슨 내가 보려고 만든 정규식 예제들
규칙 참고 blog :
'JavaScript' 카테고리의 다른 글
CSS - input [type="range"] 투명하게 만들기 (feat. 브라우저 별 속성 -web-kit-appearance) (1) | 2022.09.05 |
---|---|
CSS - white-space 란 (0) | 2022.08.31 |
CSS - 이미지 자르기(crop) (2) | 2022.07.07 |
CSS - <li 태그> dot 스타일 변경하기 + 들여쓰기 (0) | 2022.07.05 |
CSS - 배경 이미지 animation 으로 이동시키기 (0) | 2022.07.03 |
댓글