정규표현식은 문자열에서 특정한 문자를 찾아내는 도구
=> 특정한 규칙을 갖는 문자열로 이루어진 표현식
정규표현식 규칙을 슬래시(/)로 감싸 사용
슬래시 안에 들어온 문자열이 찾고자 하는 문자열
let pattern = /c/;
RegExp 객체의 생성자 함수를 호출하여 사용
let pattern = new RegExp('c');
exec 는 execution의 줄임말로, 원하는 정보를 뽑아내고자 할 때 사용
검색의 대상이 찾고자 하는 문자열에 대한 정보를 가지고 있다면 이를 배열로 반환하며, 찾는 문자열이 없다면 null
을 반환
let pattern = /c/;
pattern.exec('coding') // ['c']
찾고자 하는 문자열이 대상 안에 있는지의 여부를 boolean 으로 리턴
let pattern = /c/;
pattern.test('coding') // true
RegExp.exec() 와 비슷한 기능을 하며, 정규 표현식을 인자로 받아 주어진 문자열과 일치된 결과를 배열로 반환합니다. 일치되는 결과가 없으면 null
을 리턴
let pattern = /c/;
let str = 'coding';
str.match(pattern); // ['c']
문자열에서 찾고자 하는 대상을 검색해서 이를 치환하려는 문자열로 변경 후 변경된 값을 리턴
let pattern = /c/;
let str = 'coding';
str.replace(pattern, 'C'); // 'Coding'
주어진 인자를 구분자로 삼아, 문자열을 부분 문자열로 나누어 그 결과를 배열로 반환
정규표현식을 인자로 받아 가장 처음 매칭되는 부분 문자열의 위치를 반환 / 매칭되는 문자열이 없으면 -1
을 반환
"JavaScript".search(/script/); // -1 대소문자를 구분
"JavaScript".search(/Script/); // 4
"coding".search(/odi/); // 1
정규표현식은 플래그를 설정해 줄 수 있으며, 플래그는 추가적인 검색 옵션의 역할
플래그들은 각자 혹은 함께 사용하는 것이 모두 가능하며, 순서에 구분이 없다
i를 붙이면 대소문자를 구분하지 않는다.
let withi = /c/i;
let withouti = /c/;
"Coding".match(withi); // ['C']
"Coding".match(withouti); // null
global의 약자로, g를 붙이면 검색된 모든 결과를 리턴
let withg = /c/g;
let withoutg = /c/;
"coolcoding".match(withg); // ['c', 'c']
"coolcoding".match(withoutg); // ['c'] g 가 없으면 첫 번째 검색 결과만 반환
m을 붙이면 다중행을 검색
let str = `1st : cool
2nd : cod
3rd : ing`;
str.match(/c/gm)
// 3개의 행을 검색하여 모든 c 를 반환
// ['c', 'c']
str.match(/c/m)
// m은 다중행을 검색하게 해 주지만, g 를 빼고 검색하면 검색 대상을 찾는 순간 검색을 멈추기 때문에
// 첫 행의 ['c'] 만 리턴
정규식 패턴 | 설명 |
---|---|
^ | 줄(Line)의 시작에서 일치 /^abc/ |
$ | 줄(Line)의 끝에서 일치 /xyz$/ |
. | (특수기호, 띄어쓰기를 포함한) 임의의 한 문자 |
a(bar)b | a or b 와 일치, 인덱스가 작은 것을 우선 반환 |
* | 0회 이상 연속으로 반복되는 문자와 가능한 많이 일치. {0,} 와 동일 |
*? | 0회 이상 연속으로 반복되는 문자와 가능한 적게 일치. {0} 와 동일 |
+ | 1회 이상 연속으로 반복되는 문자와 가능한 많이 일치. {1,} 와 동일 |
+? | 1회 이상 연속으로 반복되는 문자와 가능한 적게 일치. {0} 와 동일 |
{3} | 숫자 3개 연속 일치 |
{3,} | 3개 이상 연속 일치 |
{3, 5} | 3개 이상 5개 이하 연속 일치 |
() | 캡쳐(capture)할 그룹 |
[a-z] | a부터 z 사이의 문자 구간에 일치(영어 소문자) |
[A-Z] | A부터 Z 사이의 문자 구간에 일치(영어 대문자) |
[0-9] | 0부터 9 사이의 문자 구간에 일치(숫자) |
\(역슬래쉬) | escape 문자. 특수 기호 앞에 \를 붙이면 정규식 패턴이 아닌, 기호 자체로 인식 |
\d | 숫자를 검색함. /[0-9]/와 동일 |
\D | 숫자가 아닌 문자를 검색함. /[^0-9]/와 동일 |
\w | 영어대소문자, 숫자, (underscore)를 검색함. /[A-Za-z0-9]/ 와 동일 |
\W | 영어대소문자, 숫자, (underscore)가 아닌 문자를 검색함. /[^A-Za-z0-9]/ 와 동일 |
[^] | []안의 문자열 앞에 ^이 쓰이면, []안에 없는 문자를 검색함 |
Chracter | 뜻 |
---|---|
bar(or 연산자) | 또는 |
( ) | 그룹 |
[ ] | 문자셋, 괄호안의 어떤 문자든 |
[^] | 부정 문자셋, 괄호안의 어떤 문가 아닐때 |
(?:) | 찾지만 기억하지는 않음 |
Chracter | 뜻 |
---|---|
? | 없거나 있거나 (zero or one) |
* | 없거나 있거나 많거나 (zero or more) |
+ | 하나 또는 많이 (one or more) |
{n} | n번 반복 |
{min,} | 최소 |
{min,max} | 최소, 그리고 최대 |
Chracter | 뜻 |
---|---|
\b | 단어 경계 |
\B | 단어 경계가 아님 |
^ | 문장의 시작 |
$ | 문장의 끝 |
Chracter | 뜻 |
---|---|
\ | 특수 문자가 아닌 문자 |
. | 어떤 글자 (줄바꿈 문자 제외) |
\d | digit 숫자 |
\D | digit 숫자 아님 |
\w | word 문자 |
\W | word 문자 아님 |
\s | space 공백 |
\S | space 공백 아님 |
let regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
let regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;