문자열에 나타나는 특정 문자 조합과 대응시키기 위해 사용되는 패턴으로
자바스크립트에서는 정규표현식도 객체로 나타냅니다.
복잡해질 수 있는 조건문 혹은 반복문을 정규표현식을 이용해 간단히 표현할 수 있습니다.
but 가독성이 떨어져 정규표현식을 모른다면 뜻을 이해하기 힘듭니다.
정규표현식은 RegExp의 exec 메서드와 test 메서드
String의 match메서드 replace메서드 search메서드 split메서드에서 주로 사용하는 패턴입니다!
let str = /^x/; //첫번째 방법
let str = new RegExp("xxx"); //두번째 방법
첫번째 방법으로는 / 로 감싸는 패턴이 있고
두번째 방법으로는 RegExp 객체의 생성자 함수를 호출하는 방법이 있습니다
첫번째 방법 ( / / ) | 두번째 방법 (생성자 함수 호출) |
스크립트가 불러와질때 컴파일 | 실행 시점에 컴파일 |
스크립트를 바로 불러오는 경우 | 다른 출처에서 패턴을 가져오는 경우 |
정규식이 상수라면 성능이 향상 | 패턴이 변경될 수 있는 경우 |
정규표현식 | 설명 | 간단히 표현 |
^x | 문자열의 시작을 표현하고 ^x는 문자열이 x로 시작함을 의미한다. | |
x$ | 문자열의 종료를 표현하고 x$는 문자열이 x로 끝난다를 의미한다. | |
.x | 임의의 한 문자의 자리수를 표현하며 문자열이 x로 끝난다를 의미한다. ex) ax, ox는 대응되지만 xo에는 대응되지 않는다. | |
x+ | x가 1번 이상 반복한다. | |
x? | x의 존재 여부를 확인한다. | |
x* | x의 반복 여부를 확인한다. | |
x|y | or을 표현한다. x혹은 y가 존재하는지를 의미한다. | |
(x) | 그룹을 표현하고 x를 그룹으로 처리한다. | |
(x)(y) | 그룹들의 집합을 표현한다. 앞에서부터 순서대로 번호를 부여하여 관리한다. 그룹화된 데이터들은 배열 형식으로 관리된다. | |
(x)(?:y) | 그룹들의 집합에서 예외를 표현한다. 그룹 집합으로 관리되지 않음을 뜻한다. | |
x{n} | x문자가 n번 반복한 문자를 찾는다. | |
x{n,} | x를 n번 이상 반복한 문자를 찾는다. | |
x{n,m} | x를 n번이상 m번 이하 반복한 문자를 찾는다. |
정규표현식 | 설명 | 간단한 표현 |
[xy] | xy중에 하나를 찾는다. | |
[^xy] | xy를 제외하고 문자 하나를 찾는다. | |
[x-z] | x~z 사이의 문자 중 하나를 찾는다. |
정규표현식 | 설명 | 간단한 표현 |
[\b] | 백스페이스와 대응된다. \b와 혼동 🚫 | |
\b | 단어 경계에 대응 문자와 공백사이의 문자를 찾는다. 사용시 앞의 문자 \b(str) 뒤의 문자 (str)\b | |
\B | 문자와 공백 사이가 아닌 값을 찾는다. | |
\d | 숫자 문자에 대응한다. [0-9]와 동일 | |
\D | 숫자 문자가 아닌 것에 대응 [^0-9]와 동일 | |
\n | 줄바꿈 문자에 대응한다. | |
\s | 스페이스,탭,줄바꿈 등의 하나의 공백 문자에 대응한다. | |
\S | 공백 문자가 아닌 하나의 문자에 대응한다. | |
\t | 탭 문자에 대응한다. | |
\v | 수직 탭 문자에 대응한다. | |
\w | 밑줄(_)를 포함한 영숫자 문자에 대응한다. | |
\W | 단어 문자가 아닌 문자에 대응한다. | |
\0 | 널 문자에 대응한다. 🚫뒤에 다른 숫자 쓰는거 금지! | |
\n | 정규식 내부의 n번째 괄호에서 대응한 부분의 역참조 |
let str = 'he is angry';
let str2 = str.replace(/\bh/, 'sh');
console.log(str2); //result: she is angry
str2 =str.replace(/y\b/, 'abc');
console.log(str2); //result: he is angrabc
Flag | 설명 |
g | Global-- 문자열 내의 모든 패턴을 찾는다 |
i | Ignore Case -- 문자열의 대소문자를 구별 X |
m | Multi Line -- 문자열에서 행이 바뀌어도 찾는다. |
flag는 정규표현식의 마지막 /의 뒤에 사용합니다.
const str = "나는 1이야 너는 2?";
console.log(str.split(/[0-9]/g));
//result
//[ '나는 ', '이야 너는 ', '?' ]
/0-9]/g를 사용하면 전체에서 0~9사이의 숫자를 찾습니다.
const str = "I am ironman";
console.log(str.split(/[i]/gi));
//result
//[ '', ' am ', 'ronman' ]
i를 대소문자 상관없이 찾는 것을 볼 수 있습니다.
나머지 예제는 사용하면서 하나하나씩 추가해나가겠습니다!
참고자료