Search

RegExp

31.1 정규 표현식이란?

문자열을 대상으로 패턴 매칭 기능을 제공합니다.

31.2 정규 표현식의 생성

패턴과 플래그로 구성됩니다.
/ regexp / i 시작 기호 패턴 종료 기호 플래그
JavaScript
복사
정규 표현식 리터럴로 객체 생성 예시입니다.
const target = 'Is this all there is?'; // 패턴 is // 플래그: i => 대소문자를 구별하지 않고 검색합니다. const regexp = /is/i; // test 메서드는 target 문자열에 대해 정규 표현식 regexp의 패턴을 검색하여 패칭 결과를 불리언 값으로 반환합니다. regexp.test(target); // true
JavaScript
복사
RegExp 생성자 함수를 사용하여 객체를 생성할 수도 있습니다.
/** * pattern: 정규 표현식의 패턴 * flags: 정규 표현식의 플래그(g, i, m, u, y) */ new RegExp(pattern[, flags])
JavaScript
복사

31.3 RegExp 메서드

정규 표현식을 사용하는 메서드는 RegExp.prototype.exec, RegExp.prototype.test, RegExp.prototype.match, RegExp.prototype.replace, RegExp.prototype.search, RegExp.prototype.split 등이 있습니다.

31.3.1 RegExp.prototype.exec

인수로 잔달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 배열로 반환합니다. 결과가 없을 경우 null을 반환합니다.
const target = 'Is this all there is?'; const regExp = /is/ regExp.exec(target); // -> ["is", index: 5, input: "Is this all there is?", groups: undefined]
JavaScript
복사
모든 패턴을 검색하는 g 플래그를 지정해도 첫 번째 매칭 결과만 반환하므로 주의해야합니다.

31.3.2 RegExp.prototype.test

인수로 전달받은 문자열에 대해 패턴을 검색하여 매칭 결과를 불리언 값으로 반환합니다.
const target = 'Is this all there is?'; const regExp = /is/; regExp.test(target); // -> true
JavaScript
복사

31.3.3 String.prototype.match

String 표준 빌트인 객체가 제공하는 match 메서드는 대상 문자열과 인수로 전달받은 정규 표현식과의 매칭 결과를 배열로 전달합니다.
const target = 'Is this all there is?'; const regExp = /is/; target.match(regExp); // -> ["is", index: 5, input: "Is this all there is?", groups: undefined]
JavaScript
복사
exec의 경우 g를 지정해도 첫 번째 매칭 결과만 반환하지만, match는 모든 결과를 배열로 반환합니다.

31.4 플래그

플래그는 6개가 있습니다. 이중 i, g, m이 가장 많이 사용되는 옵션이며, 여러 옵션을 동시에 설정할 수 있습니다.
i (ignore case) : 대소문자를 구별하지 않고 패턴을 검색합니다.
g (Global) : 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색합니다.
m (multi line) : 문자열의 행이 바뀌더라도 패턴 검색을 계속합니다.
s (dotall) : 점(.) 메타문자가 개행문자와 매치되도록 합니다.
d (hasIndices) : 부분 문자열 일치에 대해 인덱스 생성합니다.
u (unicode) : “unicode”, 패턴을 유니코드 코드 포인트의 시퀀스로 간주합니다.
y (sticky) : 대상 문자열의 현재 위치에서 탐색을 시작합니다.

31.5 패턴

일정한 패턴을 가진 문자열을 나타내기 위한 형식 언어(formal language)이며, 특정한 의미를 가진 메타문자나 기호로 표현할 수 있습니다.

31.5.1 문자열 검색

검색 대상 문자열과 플래그를 생략한 정규 표현식의 매칭 결과를 구하면 대소문자르 ㄹ구별하여 정규 표현시고가 매치한 첫 번째 결과만 반환합니다.
const target = 'Is this all there is?'; const regexp = /is/; regExp.test(target); // true;
JavaScript
복사

31.5.2 임의의 문자열 검색

.은 임의의 문자 한개를 의미합니다. 문자 내용은 무엇이든 상관없으며, …과 같이 3개를 연속해서 사용시 문자의 내용과 상관없이 3자리 문자열과 매치합니다.
const target = 'Is this all there is?'; // 임의의 3자리 문자열을 대소문자를 구별하여 전역 검색합니다. const regExp = /.../g; target.match(regExp); // ['Is ', 'thi', 's a', 'll ', 'the', 're ', 'is?']
JavaScript
복사

31.5.3 반복 검색

{m,n}

앞선 패턴이 최소 m번, 최대 n번 반복되는 문자열을 의미합니다. 콤마 뒤에 공백이 있으면 안됩니다.
const target = 'A AA B BB Aa Bb AAA'; // 'A'가 최소 1번 최대 2번 반복되는 문자열을 전역 검색합니다. const regExp = /A{1,2}/g; target.match(regExp); // -> ['A', 'AA', 'A', 'AA', 'A']
JavaScript
복사

{n}

앞선 패턴이 n번 반복되는 문자열을 의미합니다. 즉 {n}은 {n,n}과 같습니다.
const target = 'A AA B BB Aa Bb AAA'; const regExp = /A{2}/g; target.match(regExp); // -> ['AA', 'AA']
JavaScript
복사

{n,}

앞선 패턴이 최소 n번 이상 반복되는 문자열을 의미합니다.
const target = 'A AA B BB Aa Bb AAA'; const regExp = /A{2,}/g; target.match(regExp); // ['AA', 'AAA']
JavaScript
복사

+

앞선 패턴이 최소 한번 이상 반복되는 문자열을 의미합니다. 즉 +는 {1,}과 같습니다. A+는 A가 한번 이상 반복되는 문자열입니다.
const target = 'A AA B BB Aa Bb AAA'; const regExp = /A+/g; target.match(regExp); // ['A', 'AA', 'A', 'AAA']
JavaScript
복사

?

앞선 패턴이 최대 한번 이상 반복되는 문자열을 의미합니다. 즉 {0,1}과 같습니다. 다음 예제의 경우 /colou?r/는 ‘colo’ 다음 ‘u’가 최대 한 번 이상 반복되고 ‘r’이 이어지는 문자열들과 매치합니다.
const target = 'color colour'; const regExp = /colou?r/g; target.match(regExp); // ['color', 'colour']
JavaScript
복사

31.5.4 OR 검색

|

or의 의미를 갖습니다.
const target = 'A AA B BB Aa Bb'; const regExp = /A|B/g; target.match(regExp); // ['A', 'A', 'A', 'B', 'B', 'B', 'A', 'B']
JavaScript
복사
분해되지 않은 단어 레벨로 검색하기 위해서는 +를 함께 사용합니다.
const target = 'A AA B BB Aa Bb'; const regExp = /A+|B+/g; target.match(regExp); // ['A', 'AA', 'B', 'BB', 'A', 'B']
JavaScript
복사

[]+

or로 동작하며, +를 사용하면 앞선 패턴을 한 번 이상 반복합니다.
const target = 'A AA B BB Aa Bb'; // A 또는 B가 한 번 이상 반복되는 문자열을 전역 검색합니다. const regExp = /[AB]+/g; target.match(regExp); // ['A', 'AA', 'B', 'BB', 'A', 'B']
JavaScript
복사

[-]

범위를 지정하려면 []내에 -를 사용합니다. 다음 예제의 경우 대문자 알파벳을 검색합니다.
const target = 'A AA BB ZZ Aa Bb'; const regExp = /[A-Z]+/g; target.match(regExp); // ['A', 'AA', 'BB', 'ZZ', 'A', 'B']
JavaScript
복사
대소문자를 구별하지 않고 알파벳을 검색하는 방법입니다.
const target = 'AA BB Aa Bb 12'; const regExp = /[A-Za-z]+/g; target.match(regExp); // ['AA', 'BB', 'Aa', 'Bb']
JavaScript
복사
숫자는 다음과 같습니다.
const target = 'AA BB 12,345'; const regExp = /[0-9]+/g; target.match(regExp); // ['12', '345']
JavaScript
복사

\d, \D

이를 간단하게 도 적을 수 있는데 \d, \D가 있습니다. \d는 숫자, \D는 숫자가 아닌 문자입니다.
const target = 'AA BB 12,345 가나다라'; let regExp = /[\d,]+/g; target.match(regExp); // ['12,345'] regExp = /[\D,]+/g; target.match(regExp); // ['AA BB ', ',', ' 가나다라']
JavaScript
복사

\w, \W

\w는 알파벳, 숫자, 언더스코어 [A-Za-z0-9_]를 의미합니다. \W는 알파벳, 숫자 언더스코어가 아닌 문자입니다.
const target = 'Aa Bb 12,345 _$%&'; let regExp = /[\w,]+/g; target.match(regExp); regExp = /[\W,]+/g; target.match(regExp);
JavaScript
복사

31.5.5 NOT 검색

[…] 내의 ^은 not의 의미를 갖습니다.
const target = 'AA BB 12 Aa Bb'; const regExp = /[^0-9]+/g; target.match(regExp); // -> ["AA BB ", "Aa Bb"]
JavaScript
복사

31.5.6 시작 위치로 검색

[…] 밖의 ^은 문자열의 시작을 의미합니다.
const target = 'https://poiemaweb.com'; const regExp = /^https/; regExp.test(target); true
JavaScript
복사

31.5.7 마지막 위치로 검색

$는 문자열의 마지막을 의미합니다.
const target = 'https://poiemaweb.com'; const regExp = /com$/; regExp.test(target); true
JavaScript
복사

31.6 자주 사용하는 정규 표현식

31.6.1 특정 단어로 시작하는지 검사

^이 들어가 http로 시작된 단어 이면서, ?가 들어가 최대 한번(0번 포함)이상 반복되는지 검사합니다.
const url = 'https://example.com'; /^https?:\/\//.test(url); // true
JavaScript
복사

31.6.2 특종 단어로 끝나는지 검사

검색 대싱 문자열이 html로 끝났는지 검사합니다.
cons tfileName = 'index.html'; /html$/.test(fileName); // true
JavaScript
복사

31.6.3 숫자로만 이루어진 문자열인지 검사

^은 문자열 시작, $은 문자열의 마지막, \d는 숫자, +는 앞선 패턴이 한 번 이상 반복되는 문자열입니다.
const target = '12345'; /^\d+$/.test(target); // true
JavaScript
복사

31.6.4 하나 이상의 공백으로 시작하는지 검사

\s는 여러가지 공백 문자를 의미합니다.
const target = ' Hi'; /^[\s]+/.test(target); // true
JavaScript
복사

31.6.5 아이디로 사용 가능한지 검사

자리수{}, 알파벳 숫자 인지 검사합니다.
const id = 'abc123'; /^[A-Za-z0-9]{4,10}$/.test(id); // true
JavaScript
복사

31.6.6 메일 주소 형식에 맞는지 검사

const email = 'ungmo2@gmail.com'; /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\/[a-zA-Z]{2,3}$/.test(email); // true
JavaScript
복사