티스토리 뷰
정규표현식?
문자열에서 특정한 문자를 찾아내는 작업을 해야 한다고 하자. 작업의 대상(특정한 문자)을 찾은 다음, 작업을 해야 한다.
- 특정한 문자가 어떤 패턴을 가지고 있는지 찾는다.
- 문자열에서 패턴에 일치하는 문자를 찾는다.
정규표현식에서는 1번을 컴파일, 2번을 실행이라고 한다. 더 구체적으로 말하면 패턴을 정규표현식 객체로 만드는 과정을 컴파일이라고 한다. 그리고 패턴에 일치하는 문자를 찾는 과정을 실행이라고 한다.
정리하면 정규표현식은 문자열에서 특정한 문자를 찾아내는 도구 역할을 한다. 정규표현식은 컴파일, 실행 두 가지 단계로 이루어진다.
컴파일
컴파일은 검출하고자 하는 패턴을 만드는 일이다. 패턴은 정규표현식 객체로 만들어지며 정규표현식 리터럴, 정규표현식 객체 생성자 두 가지가 있다.
1. 정규표현식 리터럴
var pattern = /a/;
리터럴은 /(슬래시)
와 /(슬래시)
로 감싸야 하며 '(따옴표)
를 사용하지 않아야 한다.
- 리터럴은 스크립트가 불러올 때 컴파일된다.
- 정규표현식이 변하지 않을 경우 상수로 사용해서 성능을 향상시킬 수 있다.
2. 정규표현식 객체 생성자
var pattern = new RegExp('a');
인자는 /
로 감싸지 않으나 '
or "
따옴표를 사용한다.
- 생성자 함수를 사용하면 정규표현식이 실행 시점에 컴파일된다.
- 정규표현식의 패턴이 변경될 수 있는 경우 사용한다.
실행
실행은 대상에 대한 구체적인 작업을 수행한다. 작업에는 검색, 판별, 치환이 있다.
- 검색 : 패턴에 해당되는 문자열을 찾는다.
- 판별 : 패턴에 해당되는 문자열이 있는지 검사한다.
- 치환 : 패턴에 해당되는 문자열을 다른 문자열로 치환한다.
1. RegExp에서 실행
RegExp.exec()
exec()
는 인자 안에 패턴에 해당되는 문자열을 찾아서 배열로 리턴한다. 패턴에 해당되는 문자열이 없을 경우 null을 리턴한다.
var pattern = /a/;
pattern.exec('abcde'); // ["a"]
var pattern = /a./; // a 다음에 1개의 문자가 와야 한다.
patten.exec('abcde'); // ["ab"]
pattern.exec('bcdef') // null, 패턴에 일치하는게 없기 때문에
RegExp.test()
test()
는 인자 안에 패턴에 해당되는 문자열이 있으면 true, 없으면 false를 리턴한다.
var pattern = /a./;
patten.test('abcde'); // true
patten.test('bcdef'); // false
2. String에서 실행
String.match()
match()
는 패턴에 해당되는 문자열을 찾아서 배열로 리턴한다. 패턴에 해당되는 문자열이 없을 경우 null을 리턴한다.
var pattern = /a/;
'abcdef'.match(pattern); // ["a"];
'bcdefg'.match(pattern); // null
String.search()
search()
는 패턴에 해당되는 문자열이 있는지 검사하는 메서드다. 해당하는 부분의 인덱스를 리턴한다. 패턴에 해당하는 문자열이 없으면 -1을 리턴한다.
String.replace()
문자열에서 패턴에 해당되는 문자열을 찾아서 다른 문자열로 치환하는 메서드다.
var pattern = /a/;
'abcdef'.replace(pattern, 'A'); // "Abcdef"
패턴
문장의 시작과 끝
문자 | 의미 |
^ | 문장의 시작 |
$ | 문장의 끝 |
수량자
문자 | 의미 |
? | 앞의 표현식이 0 또는 1회 => {0,1} |
* | 앞의 표현식이 0회 이상 연속으로 반복 => {0,} |
+ | 앞의 표현식이 1회 이상 연속으로 반복 => {1,} |
{n} | n번 반복, n은 양의 정수여야 한다 |
{min,} | 최소 |
{min, max} | 최대. min <= max를 만족해야 한다. |
그룹과 범위
문자 | 의미 |
| | 또는 |
( ) | 그룹 |
[^] | 부정 문자셋 |
(?:) | 찾지만 기억하지는 않음 |
문자
문자 | 의미 |
\ | 특수 문자가 아닌 문자 |
. | 어떤 글자(줄바꿈 문자 제외) |
\d | digit 숫자 => [0-9] |
\D | digit 숫자 아님 => [^0-9] |
\w | word 문자 => [A-Za-z0-9_] |
\W | word 문자 아님 => [^A-Za-z0-9_] |
\s | 페이스, 탭, 폼피드, 줄 바꿈 문자등을 포함한 하나의 공백 문자 |
\S | 공백 문자가 아닌 하나의 문자 |
\t | 탭문자 |
\f | 폼피드 문자 |
\n | 줄 바꿈 문자 |
패턴 활용
var pattern = /\$/; // 문자 '$'가 있는 패턴
pattern.exec('$12$ \-\ $25$'); // ["$"], index : 0
var pattern = /^\$/; // 문장의 시작에 문자 '$'가 있는 패턴
pattern.exec('$12$ \-\ $25$'); // ["$"] , index : 0
var pattern = /\$$/; // 문장의 끝에 문자 '$'가 있는 패턴
pattern.exec('$12$ \-\ $25$'); // ["$"], index : 10
※ escape?
정규표현식에서 원래 는 문장의 끝이라는 역할을 가지고 있다. 하지만 앞에 \가 오면 기존 역할에서 탈출(escape)한 단순한 문자 $를 의미하는 것으로 \$를 escape 문자라고 한다.
플래그
정규표현식 패턴을 만들 때 옵션을 설정할 수 있다.
플래그 | 설명 |
g | 전역 검색 |
i | 대소문자 구분 없는 검색 |
m | 다중행(multi-line) 검색 |
s | .에 개행 문자도 매칭(ES2018) |
u | 유니코드; 패턴을 유니코드 코드 포인트의 나열로 취급한다. |
y | "sticky" 검색을 수행. 문자열의 현재 위치부터 검색을 수행한다 |
참고자료
'Js' 카테고리의 다른 글
[js] 코루틴에서 제너레이터, 이터러블/이터레이터까지 여정 (0) | 2021.05.03 |
---|---|
[js] 특정 날짜에 해당하는 Date 객체 생성 및 날짜 가져오기 (0) | 2019.08.25 |
- Total
- Today
- Yesterday
- 콜레이션변경
- jpa 쿼리 로그
- hibernate 쿼리 로그
- csv to bean
- TCP연결
- 문자집합변경
- file
- spring retry
- CGLIB프록시
- AOP
- mysql 이모지
- 이모지입력오류
- csv 라이브러리
- github actions components
- 4Way Handshake
- github actions 구성요소
- http커넥션
- 쿼리 파라미터 바인딩
- online ddl
- 도메인구성요소
- read timeout
- utf8mb3
- github actions 기초
- 코프링
- 콜레이션
- tcp커넥션
- 엔티티와값객체
- spring boot3 쿼리 로그
- opencsv
- mysql 온라인 ddl
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |