[TIL] Day48- 정규표현식

공부중인 개발자·2021년 6월 16일
0

TIL

목록 보기
48/64
post-thumbnail

정규표현식을 한 문장으로 정의하면 문자열에서 특정한 문자를 찾아내는 도구

정규표현식을 확인할 수 있는 사이트
https://regexr.com/

정규표현식 사용하기

  • 리터럴 패턴

정규표현식 규칙을 슬래시(/)로 감싸 사용
슬래시 안에 들어온 문자열이 찾고자 하는 문자열이며, 컴퓨터에게 '슬래시 사이에 있는 문자열을 찾고 싶어!'라고 명령을 내리는 것

let pattern = /c/;
//문자열 'c'를 찾겠다는 명령
  • 생성자 함수 호출 패턴

RegExp 객체의 생성자 함수를 호출하여 사용합니다.

let pattern = new RegExp('c');
// new 를 이용해서 정규 표현식 객체를 생성하고,
// 리터럴 패턴과 동일한 명령입니다.

정규표현식 내장 메소드

RegExp 객체의 메소드

  • exec()

exec 는 execution 의 줄임말로, 원하는 정보를 뽑아내고자 할 때 사용
검색의 대상이 찾고자 하는 문자열에 대한 정보를 가지고 있다면 이를 배열로 반환
찾는 문자열이 없다면 null을 반환

let pattern = /c/; // 찾고자 하는 문자열
console.log(pattern.exec('cocoa')) // ["c", index: 0, input: "cocoa", groups: undefined] 이러한 답이 나온다.
console.log(pattern.exec('water')) // null 이 나온다.
  • test()

찾고자 하는 문자열이 대상안에 있는지의 여부를 boolean 으로 리턴

let pattern = /c/; // 찾고자 하는 문자열
console.log(pattern.test('cocoa')) // true;

String 객체의 메소드

  • match()

RegExp.exec() 와 비슷한 기능을 하며, 정규 표현식을 인자로 받아 주어진 문자열과 일치된 결과를 배열로 반환, 일치하는 것이 없다면 null 리턴

let pattern = /c/;
let str = 'cocoa';
str.match(pattern);
// str 안에 pattern 이 포함되어 있으므로, ['c'] 를 반환
  • replace()

'검색 후 바꾸기'를 수행
첫 번째 인자로는 정규표현식을 받고, 두 번째 인자로는 치환하려는 문자열을 받음
문자열에서 찾고자 하는 대상을 검색해서 이를 치환하려는 문자열로 변경 후 변경된 값을 리턴

let pattern = /c/;
let str = 'cocoa';
str.replace(pattern, 'C');
// str 안에서 pattern 을 검색한 후 'C' 로 변경하여 그 결과를 리턴
// 'CoCoa' 리턴
  • search()

정규표현식을 인자로 받아 가장 처음 매칭되는 부분 문자열의 위치를 반환
매칭되는 문자열이 없으면 -1을 반환

"JavaScript".search(/script/); // -1 대소문자 구분
"JavaScript".search(/Script/); // 4
"cocoa".search(/coa/); // 2

flag

정규표현식은 플래그를 설정해 줄 수 있으며, 플래그는 추가적인 검색 옵션의 역할을 함
이 플래그들은 각자 혹은 함께 사용하는 것이 모두 가능하며, 순서에 구분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]/ 와 동일
[^] []안의 문자열 앞에 ^이 쓰이면, []안에 없는 문자를 검색함


사실 정규표현식은 사용해본 적이 없다. 하지만 분명 알고 있어야하는 내용이고, 시간이 될때마다 정규표현식에 대해 공부해봐야겠다.

profile
열심히 공부하자

0개의 댓글