
사실 정규표현식은 JavaScript를 공부하면서 간혹가다가 만나게 되었었다. 하지만 어렵다는 이유로 외면하면서 잠시 미뤄뒀었는데(ㅎ) 이제는 더 이상 미루지 말자는 생각에 공부를 하면서 정리 해보려 한다.
정규 표현식은 문자열에 나타나는 특정 문자 조합을 찾기 위해 사용되는 패턴
정규표현식을 이용한다면 특정한 패턴의 문자열 조합을 쉽게 찾아낼 수 있습니다. 기본적인 사용법을 알아둔다면 여러 방향으로 활용할 수 있습니다.
정규식 리터럴이란 슬래시("/")를 사용하는 방법으로 다음과 같이 사용합니다.
let re = /ab+c/;
정규식 리터럴은 스크립트가 불러와질 때 컴파일됩니다. 만약 정규식이 상수일 경우, 정규식 리터럴을 사용하는 것이 성능을 향상시킬 수 있습니다.
RegExp객체의 생성자 함수를 호출하는 방법으로 다음과 같이 사용합니다.
let re = new RegExp("ab+c");
생성자 함수를 사용하면 정규표현식이 실행 시점에 컴파일됩니다. 정규표현식의 패턴이 변경될 수 있는 경우, 혹은 사용자 입력과 같이 다른 출처로부터 패턴을 가져와야 하는 경우에는 생성자 함수를 사용하는 것이 좋습니다.
하나 이상의 b들을 찾거나, 공백을 찾는 것과 같이 문자열을 있는 그대로 찾는 것이 아니라 그 이상의 패턴을 찾기를 원한다면 패턴에 특수문자를 포함시켜서 작성하면 문자열을 찾을 수 있습니다.
| 매칭패턴 | 의미 |
|---|---|
| . | 모든 문자열(줄바꿈 제외) |
| a-zA-Z | 영어(-으로 범위 지정) |
| ㄱ-ㅎ가-힣 | 한글(-으로 범위 지정) |
| 0-9 | 숫자(-으로 범위 지정) |
| \d | 숫자 |
| \D | 숫자가 아닌 것 |
| \w | 영어, 숫자, _ |
| \W | \w가 아닌 것 |
| \s | space 공백 |
| \S | space 공백이 아닌 것 |
| \특수기호 | 특수기호 |
| 검색패턴 기호 | 의미 |
|---|---|
| | | OR |
| [] | 괄호안의 문자들 중 하나 |
| [^string] | 괄호안의 문자 제외 |
| ^string | 특정 문자열로 시작 |
| string$ | 특정 문자열로 끝 |
| () | 그룹 검색 및 분류 |
| (?:패턴) | 그룹 검색 |
| \b | 문자열의 처음/끝 |
| \B | 문자열의 처음/끝이 아님 |
| 수량패턴 기호 | 의미 |
|---|---|
| ? | 최대 한번 반복 |
| * | 없거나 있거나 |
| + | 최소 한개 반복 |
| {n} | n개 반복 |
| {n, m} | 최소 n개 최대 m개 |
| 메소드 | 의미 |
|---|---|
| exec | 대응되는 문자열을 찾는 RegExp 메소드, 대응되는 문자열을 찾지 못했을 경우 null을 반환, 일치하는 항목들을 배열로 반환 |
| test | 대응되는 문자열을 찾는 RegExp 메소드, 대응되는 문자열을 검사해서 boolean 값으로 반환 |
| match | 대응되는 문자열을 찾는 RegExp 메소드, 대응되는 문자열을 찾지 못했을 경우 null을 반환, exec와 유사하지만 무조건 첫번째 매칭 결과만 반환 |
| search | 대응되는 문자열이 있는지 검사하는 string 메소드, 대응되는 부분의 index를 반환 |
| replace | 대응되는 문자열을 찾아 다른 문자열로 치환하는 string 메소드 |
| split | 정규식 또는 문자열로 대상 문자열을 나누어 배열로 반환하는 string 메소드 |