정규표현식을 한 문장으로 정의하면 문자열에서 특정한 문자를 찾아내는 도구
정규표현식을 확인할 수 있는 사이트
https://regexr.com/
정규표현식 규칙을 슬래시(/)로 감싸 사용
슬래시 안에 들어온 문자열이 찾고자 하는 문자열이며, 컴퓨터에게 '슬래시 사이에 있는 문자열을 찾고 싶어!'라고 명령을 내리는 것
let pattern = /c/;
//문자열 'c'를 찾겠다는 명령
RegExp 객체의 생성자 함수를 호출하여 사용합니다.
let pattern = new RegExp('c');
// new 를 이용해서 정규 표현식 객체를 생성하고,
// 리터럴 패턴과 동일한 명령입니다.
exec 는 execution 의 줄임말로, 원하는 정보를 뽑아내고자 할 때 사용
검색의 대상이 찾고자 하는 문자열에 대한 정보를 가지고 있다면 이를 배열로 반환
찾는 문자열이 없다면 null을 반환
let pattern = /c/; // 찾고자 하는 문자열
console.log(pattern.exec('cocoa')) // ["c", index: 0, input: "cocoa", groups: undefined] 이러한 답이 나온다.
console.log(pattern.exec('water')) // null 이 나온다.
찾고자 하는 문자열이 대상안에 있는지의 여부를 boolean 으로 리턴
let pattern = /c/; // 찾고자 하는 문자열
console.log(pattern.test('cocoa')) // true;
RegExp.exec() 와 비슷한 기능을 하며, 정규 표현식을 인자로 받아 주어진 문자열과 일치된 결과를 배열로 반환, 일치하는 것이 없다면 null 리턴
let pattern = /c/;
let str = 'cocoa';
str.match(pattern);
// str 안에 pattern 이 포함되어 있으므로, ['c'] 를 반환
'검색 후 바꾸기'를 수행
첫 번째 인자로는 정규표현식을 받고, 두 번째 인자로는 치환하려는 문자열을 받음
문자열에서 찾고자 하는 대상을 검색해서 이를 치환하려는 문자열로 변경 후 변경된 값을 리턴
let pattern = /c/;
let str = 'cocoa';
str.replace(pattern, 'C');
// str 안에서 pattern 을 검색한 후 'C' 로 변경하여 그 결과를 리턴
// 'CoCoa' 리턴
정규표현식을 인자로 받아 가장 처음 매칭되는 부분 문자열의 위치를 반환
매칭되는 문자열이 없으면 -1을 반환
"JavaScript".search(/script/); // -1 대소문자 구분
"JavaScript".search(/Script/); // 4
"cocoa".search(/coa/); // 2
정규표현식은 플래그를 설정해 줄 수 있으며, 플래그는 추가적인 검색 옵션의 역할을 함
이 플래그들은 각자 혹은 함께 사용하는 것이 모두 가능하며, 순서에 구분X
i
i를 붙이면 대소문자를 구분하지 않음
let withi = /c/i;
let withouti = /c/;
"Coplit".match(withi); // ['C']
"Coplit".match(withouti); // null
g
global 의 약자로, g 를 붙이면 검색된 모든 결과를 리턴
let withg = /c/g;
let withoutg = /c/;
"cocoa".match(withg); // ['c', 'c']
"cocoa".match(withoutg); // ['c'] g 가 없으면 첫 번째 검색 결과만 반환
m
m을 붙이면 다중행을 검색합니다.
let str = `1st : cool
2nd : code
3rd : states`;
str.match(/c/gm)
// 3개의 행을 검색하여 모든 c 를 반환합니다.
// ['c', 'c']
str.match(/c/m)
// m은 다중행을 검색하게 해 주지만, g 를 빼고 검색하면 검색 대상을 찾는 순간 검색을 멈추기 때문에
// 첫 행의 ['c'] 만 리턴
정규식 패턴 설명
^
줄(Line)의 시작에서 일치 /^abc/
$
줄(Line)의 끝에서 일치 /xyz$/
.
(특수기호, 띄어쓰기를 포함한) 임의의 한 문자
a|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]/ 와 동일
[^]
[]안의 문자열 앞에 ^이 쓰이면, []안에 없는 문자를 검색함
사실 정규표현식은 사용해본 적이 없다. 하지만 분명 알고 있어야하는 내용이고, 시간이 될때마다 정규표현식에 대해 공부해봐야겠다.