정규식 표현
정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다.
반복문과 조건문을 사용한 복잡한 코드도 정규표현식을 이용하게 된다면 매우 간단하게 표현할 수 있습니다. 다만...가독성은 떨어지게 됩니다.
처음 접하는 저희같은 초보들에겐 이해하기 힘든 내용인데요. 그래도
좌절하지말고 열심히 공부해봅시다.
■ 표현
정규표현식을 만드는 방법은 두가지가 있습니다.
01_ 정규 표현식 리터럴
슬래시로 패턴을 감싸서 작성합니다. 스크립트를 불러올 때 컴파일 되므로, 바뀔일이 없는 패턴일 경우에 사용하기에 용이합니다.
const re = /ab+c/ // /:시작,종료 기호 ab+c:패턴
02_ RegExp 객체의 생성자 호출
정규 표현식이 런타임에 컴파일 됩니다. 바뀔 수 있는 패턴이나, 외부 출처에서 가져오는 패턴의 경우 사용합니다.
const re = new RegExp('ab+c')
■ 주요 메서드
메서드 | 설명 |
---|---|
exec() | 문자열에서 일치하는 부분을 탐색합니다. 일치 정보를 나타내는 배열, 또는 일치가 없는 경우 null을 반환합니다. |
test() | 문자열에 일치하는 부분이 있는지 확인합니다. true 또는 false를 반환합니다. |
match() | 캡처 그룹을 포함해서 모든 일치를 담은 배열을 반환합니다. 일치가 없으면 null을 반환합니다. |
matchAll() | 캡처 그룹을 포함해서 모든 일치를 담은 반복기를 반환합니다. |
search() | 문자열에서 일치하는 부분을 탐색합니다. 일치하는 부분의 인덱스, 또는 일치가 없는 경우 -1을 반환합니다. |
replace() | 문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 바꿉니다. |
replaceAll() | 문자열에서 일치하는 부분을 모두 탐색하고, 모두 대체 문자열로 바꿉니다. |
split() | 정규 표현식 또는 문자열 리터럴을 사용해서 문자열을 부분 문자열의 배열로 나눕니다. |
■ 플래그
전역 탐색이나 대소문자 무시와 같은 특성을 지정하는 플래그를 가질 수 있습니다. 이 플래그는 단독으로 사용할 수 도 있고, 순서상관없이 여럿을 지정할 수도 있습니다.
플래그 | 설명 |
---|---|
d | 부분 문자열 일치에 대해 인덱스값을 생성합니다. |
g | 문자열 전체를 비교탐색합니다. |
i | 대소문자 구분없이 비교탐색합니다. |
m | 여러 행에 걸쳐 탐색합니다(여러 행의 문자열을 비교탐색합니다). 이 플래그를 사용하게되면 ^와 $는 각각 전체 입력 문자열의 시작과 끝이 아니라, 각줄의 시작과 끝에 대응하게 됩니다. |
s | 개행 문자가 .과 일치하는지 비교탐색합니다. |
u | "unicode",패턴을 유니코드 포인트의 시퀀스로 간주합니다. |
y | 대상 문자열의 현재위치에서 탐색을 시작합니다. |
■ 패턴
/abc/처럼 단순한 문자로 구성하거나, /ab+c/와 같이 문자와 특수문자의 조합으로 구성할 수도 있습니다.
패턴 | 설명 |
---|---|
abc | abc 문자열을 검색합니다. /abc/='abc' |
[abc] | a, b, c 중 문자 하나를 검색합니다. /[abc]d/='ad', 'bd', 'cd' |
[^abc] | a, b, c를 제외한 문자 하나를 검색합니다. /[^abc]d/='ed', 'fd', 'gd' |
[A-Z] | 알파벳 대문자를 검색합니다. |
[a-z] | 알파벳 소문자를 검색합니다. |
[0-9] | 0-9까지의 숫자를 검색합니다. |
. | 하나의 문자를 검색합니다. '마침표'의 의미로 사용하는 경우 '₩.'으로 표현해야합니다. |
\w | 알파벳, 숫자, _를 검색합니다. |
\W | 알파벳, 숫자, _를 제외하고 검색합니다. |
\d | 숫자를 검색합니다. |
\D | 숫자를 제외하고 검색합니다. |
\s | 하나의 공백을 검색합니다. |
^ | 행의 첫 문자가 일치해야 함을 의미합니다. |
$ | 행의 끝 문자가 일치해야 함을 의미합니다. |
* | *앞의 문자가 0번 이상 반복을 의미합니다. /a*b/ = 'b', 'ab', 'aab', 'aaab', 'aaa...b' |
+ | + 앞의 문자가 1번이상 반복을 의미합니다. /a+b/ = 'ab', 'aab', 'aaab', 'aaa...b' |
? | ?앞의 문자가 0번 또는 1번 의미합니다. /a?b/ = 'b', 'ab' |
{} | /₩d{3}/은 숫자3개를 의미합니다. /₩d{3,5}/은 숫자3~5개를 의미합니다. /₩d{3,}/은 숫자3개 이상을 의미합니다. |
a|b | a or b 를 의미합니다. |
( abc ) | 그룹화를 의미합니다. |
·단순 패턴 사용하기
단순 패턴은 문자열을 있는 그대로 탐색할 때 사용합니다. 예를 들어, /abc/ 패턴은 문자열에서 정확한 순서로 "abc"라는 문자의 조합이 나타나는 부분과 일치합니다. 그러므로 이 패턴은 "Hi, do you know your abc's?"와 "The latest airplane designs evolved from slabcraft." 두 문자열에서 일치에 성공하고, 일치하는 부분은 "abc"일 것입니다. 반면 "Grab crab"에서는 일치하지 않는데, 이 문자열은 부분 문자열로 "ab c"를 포함하긴 하지만, 정확하게 "abc"를 포함하지는 않기 때문입니다.
·특수 문자 사용하기
하나 이상의 "b"를 찾는다거나 공백 문자를 찾는 등 직접적인 일치 이상의 탐색이 필요할 땐 특수 문자를 사용합니다. 예를 들어, "하나의 "a" 이후에 0개 이상의 "b", 그 뒤의 "c""와 일치해야 하면 /ab*c/ 패턴을 사용할 수 있습니다. "b" 뒤의 *는 "이전 항목의 0번 이상 반복"을 의미합니다. 이 패턴을 문자열 "cbbabbbbcdebc"에 대해 사용하면, 일치하는 부분 문자열은 "abbbbc"일 것입니다.
'JavaScript' 카테고리의 다른 글
문자열 검색 메서드(indexOF/lastIndexOf) (6) | 2022.08.16 |
---|---|
문자열변경메서드(slice/substring/substr) (6) | 2022.08.16 |
내장 함수 (4) | 2022.08.12 |
배열 메서드(join/push/pop) (11) | 2022.08.11 |
요소 선택 (8) | 2022.08.05 |
댓글