블록체인 sw개발자
정규표현식이란
sang969
2023. 7. 21. 11:35
정규표현식
-특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어이다.
정규표현식을 이용하면, 특정 패턴에 매칭되는 문자열을 쉽게(?) 찾아낼 수 있습니다.
예를 들어 010-1111-2222 라는 전호번호는
"숫자3개", "-", "숫자4개", "-", "숫자4개" 로 이루어져 있는데,
정규표현식으로 아래와 같이 패턴을 만들어주면,
특정 문자열이 해당 패턴에 맞는지 체크할 수 있습니다.
const regex = /\d{3}-\d{4}-\d{4}/;
// (\d는 숫자를 의미하고, {} 안의 숫자는 갯수를 의미한다.)
regex.test('010-1111-2222') // true;
regex.test('01-11-22') // false;
const text = "안녕하세요 제 번호는 010-1111-2222 입니다. call me~!";
text.match(/\d{3}-\d{4}-\d{4}/); // 010-1111-2222
정규표현식 사용
1. 정규표현식 형식
/패턴/플래그
- 슬래시(/) "사이"에는 매칭시킬 "패턴"을 써준다.
- 슬래시(/) "다음"에는 옵션을 설정하는 "플래그"를 써준다.
(플래그는 하나만 찾을지, 모두 다 찾을지 등을 설정하는 옵션이라고 보면 됩니다.)
const reg1 = /정규표현식/;
const reg2 = new RegExp("정규표현식");
console.log(
"저는 정규표현식 을 사용하고 있습니다.".replace(reg1, "정규식")
); //replace 바꾸다, match 매칭시키다.
// ['9','3','3','6','3','6']
const three = /[3,6,9]/g; //global 전체를 뒤져라 []뛰어쓰기 쓸 필요가 없다
console.log("945336484436".match(three));
const korean = /[가-힣]/;
console.log('korean.exec("뷁")');
// korean.exec("뷁")
const infoReg = /^i'm/i; // i 대소문자 구분이 없다
//g랑 같이 써도된다 (^)는 해당 문자열이 앞에 시작하는가
console.log(infoReg.test("영어로 I'm 박상현"));
//false
const plusReg = /a+/gi; //a+ 하나라도 붙어있는걸 가져온다
console.log(plusReg.exec("abrewfeAwfgaaggeakjaaaaa".match(plusReg)));
// ['a', index: 0, input: 'a,A,aa,a,aaaaa', groups: undefined]
const questionReg = /a?/g; //다 찾는다
console.log("abrewfeAwfgaaggeakjaaaaa".match(questionReg));
// (25) ['a', '', '', '', '', '', '', '', '', '', '', 'a', 'a', '', '', '', 'a', '', '', 'a', 'a', 'a', 'a', 'a', '']
const starReg = /a*/g;
console.log("abrewfeAwfgaaggeakjaaaaa".match(starReg));
// (20) ['a', '', '', '', '', '', '', '', '', '', '', 'aa', '', '', '', 'a', '', '', 'aaaaa', '']
const endReg = new RegExp("A$", "ig");
console.log("abrewfeAwfgaaggeakjaaaaa".match(endReg));
// ['a']
const countReg = /[a-z]{5}/; //{5}는 글자수 {최소, 최대}
console.log("asdfd".match(countReg));
// ['asdfd', index: 0, input: 'asdfd', groups: undefined]
const countReg1 = /[a-z]{5, 10}/;
console.log("asdfghjklo".match(countReg1));
// null
const nummberReg = /\d+.[0-9]+/g;
console.log("asdgefg12.r333".match(nummberReg));
// ['333']
const nummberReg1 = /\D+.[0-9]+/g; //D는 문자를 찾는다
console.log("asdgefg12.r333".match(nummberReg1));
// (2) ['asdgefg12', '.r333']
const strReg = /\w+/; //대문자 숫자 언더바를 찾는다
console.log("asdgefg12.r3_33".match(strReg));
// ['asdgefg12', index: 0, input: 'asdgefg12.r3_33', groups: undefined]
const strReg1 = /\W+/;
console.log("asdge안녕fg12.r3_33".match(strReg1));
// ['안녕', index: 5, input: 'asdge안녕fg12.r3_33', groups: undefined]
const spaceReg = /\s+/;
console.log("ser asdr gee 31rj".match(spaceReg));
// [' ', index: 3, input: 'ser asdr gee 31rj', groups: undefined]
전화번호 정규 표현
: 유선번호라면 02-111-2222 형식이고, 핸드폰번호라면 010-1111-2222 형식입니다. 숫자의 갯수가 다릅니다.
const text = `대나무 빨대 구입 문의 : http://dogumaster.com
http://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`;
text.match(/\d{2,3}-\d{3,4}-\d{4}/g);
// [ '010-1111-2222', '02-333-7777' ]
/\d{2,3}-\d{3,4}-\d{4}/g
1) \d{2,3} => 숫자 2~3개로 시작하고,
2) \- => 다음에 하이픈(-)이 오고
3) \d{3, 4} => 다음에 숫자가 3~4개 오고,
4) \- => 다음에 하이픈(-)이 오고,
5) \d{4} => 다음에 숫자가 4개 온다.
6) g => 매칭되는걸 모두 다 찾는다(플래그)