/regexr/i
/ -> 시작, regexr -> 패턴, i -> 플래그
\d{3}
세 자리 아무 숫자\d{3,4}
세, 네 자리 아무 숫자.+=
한 개 이상의 문자열(...)
해당 영역만 그룹으로 뽑아낸다..+@(.+)\..+
중간 문자열을 뽑아낸다.생성방법
RegExp 객체로 정규표현식 기능을 제공한다.
Array, Object처럼 Literal로 생성 가능하다.
// 생성자 함수 방식 // new RegExp(표현식) const regExp1 = new RegExp("^\d+"); // new RegExp(표현식, 플래그) const regExp2 = new RegExp("^\d+","gi") // 리터럴 방식 // /표현식/ const regexp1 = /^\d+/; // /표현식/플래그 const regexp2 = /^\d+/gi;
Test
정규표현식 객체의 test 함수는 입력받은 문자열에 찾는 패턴이 있는지 찾은 후 있다면 true를 반환하고 없으면 false를 반환한다.
적용
const message = "안녕하세요. 010-3919-9225로 연락주세요"; const message2 = "안녕하세요. 연락하지 마세요" // 정규표현식 리터럴 const regExp = /\d{3}-\d{3,4}-\d{4}/; console.log(regExp.test(message)) // true console.log(regExp.test(message2)) // false
exec
정규표현식 객체의 exec 함수는 입력받은 문자열에 찾는 패턴이 있는지 찾은 후 일치한 패턴 정보를 반환하고 없으면 null을 반환한다.
적용
const message = "안녕하세요. 010-3919-9225로 연락주세요"; const message2 = "안녕하세요. 연락하지 마세요" // 정규표현식 리터럴 const regExp = /\d{3}-\d{3,4}-\d{4}/; console.log(regExp.exec(message)) console.log(regExp.exec(message2))
반환 된 값
[ '010-3919-9225' index: 7, input: '안녕하세요, 010-3919-9225로 연락주세요' group: undefined ] null
match
String 객체의 match 함수는 정규표현식 객체를 파라미터로 받아 패턴이 있는지 찾은 후 일치한 패턴 정보를 반환하고 없으면 null을 반환한다. 정규표현식 객체의 exec 함수와 같다.
적용
const message = "안녕하세요. 010-3919-9225로 연락주세요"; const message2 = "안녕하세요. 010-3919-9225말고 010-3919-9335로 연락주세요" // 정규표현식 리터럴 const regExp = /\d{3}-\d{3,4}-\d{4}/; console.log(message.match(regExp)); // 무조건 처음 매칭된 것을 반환한다. console.log(message2.match(regExp)); // 모두 탐색하려면 matchAll을 사용할 수 있다. console.log([...message2.matchAll(/\d{3}-\d{3,4}-\d{4}/g)])
반환 된 값
[ '010-3919-9225' index: 7, input: '안녕하세요, 010-3919-9225로 연락주세요' group: undefined ] [ '010-3919-9225' index: 7, input: '안녕하세요, 010-3919-9225말고 010-3919-9335로 연락주세요' group: undefined ] [ [ '010-3919-9225' index: 7, input: '안녕하세요, 010-3919-9225말고 010-3919-9335로 연락주세요' group: undefined ] [ '010-3919-9335' index: 23, input: '안녕하세요, 010-3919-9225말고 010-3919-9335로 연락주세요' group: undefined ] ] null
replace
String 객체의 replace 함수는 정규표현식 객체를 파라미터로 받아 패턴이 있는지 확인 후 일치한 패턴 정보를 원하는 문자열로 바꿀 수 있다.
적용
const message = "안녕하세요. 010-3919-9225로 연락주세요"; const message2 = "안녕하세요. 010-3919-9225말고 010-3919-9335로 연락주세요" // 정규표현식 리터럴 const regExp = /\d{3}-\d{3,4}-\d{4}/; console.log(message.replace(regExp, "전화번호")); console.log(message2.replace(regExp, "전화번호")); console.log(message2.replace(/\d{3}-\d{3,4}-\d{4}/g, "전화번호"))
반환 된 값
안녕하세요. 전화번호로 연락주세요 안녕하세요. 전화번호말고 010-3919-9335로 연락주세요 안녕하세요. 전화번호말고 전화번호로 연락주세요
search
정규표현식 객체를 파라미터로 받아 패턴이 있는지 찾은 후 일치한 패턴 정보의 위치를 반환한다.
적용
const message = "안녕하세요. 010-3919-9225로 연락주세요"; const message2 = "안녕하세요. 010-3919-9225말고 010-3919-9335로 연락주세요" // 정규표현식 리터럴 const regExp = /\d{3}-\d{3,4}-\d{4}/; console.log(message.search(regExp)); console.log(message2.search(regExp)); // 무조건 처음 매칭된 것을 반환한다. console.log(message2.search(/\d{3}-\d{3,4}-\d{4}/g)); // 모두 탐색하려면 matchAll을 사용할 수 있다. console.log([...message2.matchAll(/\d{3}-\d{3,4}-\d{4}/g)])
반환 된 값
7 7 7 [ [ '010-3919-9225' index: 7, input: '안녕하세요, 010-3919-9225말고 010-3919-9335로 연락주세요' group: undefined ] [ '010-3919-9335' index: 23, input: '안녕하세요, 010-3919-9225말고 010-3919-9335로 연락주세요' group: undefined ] ] null
capture
캡처가 적용된 정규표현식을 이용하면 match 반환값의 1번 인덱스부터 순차적으로 캡처 결과가 들어간다.
적용
const message = "안녕하세요. 010-3919-9225로 연락주세요"; // 정규표현식 리터럴 const regExp = /(\d{3})-(\d{3,4})-(\d{4})/; console.log(regExp.match(regExp));
반환 된 값
[ "010-3919-9225", "010", "3919", "9115", index: 7, input: "안녕하세요. 010-3919-9225로 연락주세요", groups: undefined ]
AAAAAABBBDFFFFFFFKK
의 압축"6A3B1D7F2K"로 압축 될 수 있다.
6개의 A, 3개의 B, 1개의 D, 7개의 F, 2개의 K
적용
const raw = "AAAAAABBBDFFFFFFFKK"; const compressed = "6A3B1D7F2K" const regExp = /(.)\1*/g; const result = raw .match(regExp) .reduce((a, b) => a + `${b.length}${b.slice(0, 1)}`, ""); console.log(result); console.log(result === compressed);
반환 된 값
6A3B1D7F2K true