javascript - core - standard-built-in-object 05 RegExp

yj k·2023년 4월 15일

javascript

목록 보기
17/18

05. RegExp

01_RegExp(정규 표현식)

정규 표현식(Regular Expression) 은 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어(format language)이다.

// 검색 대상
const target = 'JavaScript';

// 정규 표현식 리터럴 - /pattern/플래그
let regexp = /j/i;      // 패턴 : j, 플래그 : i => 대소문자 구별 없이

// RegExp 생성자 함수 - new RegExp(pattern[, flag])
regexp = new RegExp('j', 'i');
regexp = new RegExp(/j/, 'i');
regexp = new RegExp(/j/i);      // ES6부터 가능한 표현

// test 메서드 - target 문자열에 대해 정규 표현식 regexp의 패턴을 검색하여 매칭 결과를 불리언으로 반환
console.log(regexp.test(target));




02_RegExp-method(정규 표현식 메소드)

const target = 'Java JavaScript';

RegExp.prototype.exec
: 인수로 전달 받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 배열로 반환

console.log(/va/.exec(target));
console.log(/va/g.exec(target));   // 문자열 내의 모든 패턴을 검색하는 g 플래그를 지정해도 첫 번째 매칭 결과만 반환
console.log(/hello/.exec(target)); // 매칭 결과가 없을 경우 null 반환

RegExp.prototype.`test` : 인수로 전달 받은 문자열에 대해 정규 표현식의 패턴을 검색해서 매칭 결과를 불리언으로 반환 ``` console.log(/va/.test(target)); console.log(/hello/.test(target)); ```
String.prototype.`match` : String 표준 빌트인 객체가 제공하는 메서드로 대상 문자열과 인수로 전달 받은 정규 표현식과의 매칭 결과를 배열로 반환 ``` console.log(target.match(/va/)); console.log(target.match(/va/g)); // 문자열 내의 모든 패턴을 검색하는 g 플래그를 지정하면 모든 매칭 결과가 배열로 반환 console.log(target.match(/hello/)); ```
String.prototype.`replace`, `search`, `split` 등이 정규 표현식을 사용한다. => String 챕터 참조




03_flag-and-pattern


flag의 종류

i(ignore case) : 대소문자 구별 않고 패턴 검색
g(global) : 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색


flag는 옵션이므로 선택적으로 사용 할 수 있고, 순서와 상관 없이 하나 이상의 플래그를 동시에 설정할 수 있다.
``` let target = 'Java JavaScript';

console.log(target.match(/VA/));
console.log(target.match(/VA/i));
console.log(target.match(/VA/ig));


<br>
`pattern`
패턴은 특별한 의미를 가지는 메타문자 또는 기호로 표현할 수 있다.

// . : 임의의 문자열
target = 'abcdefg';
console.log(target.match(/../g)); // 임의의 2자리 문자열 전역 검색


<br>

`{m,n}` : 최소 m번, 최대 n번 반복되는 문자열 (반복 검색)

target = 'a aa aaa b bb bbb ab aab abb';
console.log(target.match(/a{2,3}/g)); // a 최소 2번 ~ 최대 3번 반복
console.log(target.match(/b{2}/g)); // b 두 번 반복
console.log(target.match(/b{3,}/g)); // b 세 번 이상 반복


<br>
`+` : 앞선 패턴이 최소 한 번 이상 반복 되는 문자열 (반복 검색)

// +는 {1,}과 같다.
console.log(target.match(/b+/g));

// ? : 앞선 패턴이 최대 한 번(0번 포함) 이상 반복 되는 문자열 (반복 검색)
// ?는 {0,1}과 같다.
target = 'soul seoul';
console.log(target.match(/se?oul/g));


<br>
`|` : or

target = 'aa bb cc dd 123 456 _@';
console.log(target.match(/a|b/g));
// 분해 되지 않은 단어 레벨로 검색
console.log(target.match(/a+|b+/g));
// [] 내의 문자는 or로 동작
console.log(target.match(/[abc]+/g));
// 범위를 지정하려면 - 사용
console.log(target.match(/[a-z]+/g));
// 대소문자 범위
console.log(target.match(/[A-Za-z]+/g));
// 숫자 범위
console.log(target.match(/[0-9]+/g));


<br>
`\d` : 숫자

// \D : 숫자가 아닌 문자
console.log(target.match(/\d+/g));
console.log(target.match(/\D+/g));
// \w : 알파벳, 숫자, 언더스코어
// \W : \w의 반대
console.log(target.match(/\w+/g));
console.log(target.match(/\W+/g));


<br>
`[..] 내의 ^ `: not

console.log(target.match(/[^0-9]+/g));
console.log(target.match(/[^a-z]+/g));
console.log('--------------------');


<br>
`[..] 밖의 ^` : 시작 위치 검색

<br>
`$` : 마지막 위치 검색

target = 'https://www.google.com';
console.log(/^https/.test(target));
console.log(/com$/.test(target));


<br><br><br>
### 04_example

1. 특정 단어로 시작하는지 검사

// http:// 또는 https:// 로 시작하는지 검사
// const url = 'https://www.google.com';
// const url = 'http://www.google.com';
const url = 'www.google.com';

console.log(/^https?:\/\//.test(url));


2. 특정 단어로 끝나는지 검사

// 파일 확장자가 js인지 검사
// const fileName = 'test.js';
const fileName = 'test.css';

console.log(/js$/.test(fileName));


3. 숫자로만 이루어진 문자열인지 검사

const target = '12345';
// const target = '12345@';
// 처음과 끝이 숫자이고 최소 한 번 이상 반복 되는 문자열과 매칭
console.log(/^\d+$/.test(target));


4. 아이디로 사용 가능한지 검사

// 알파벳 대소문자 또는 숫자로 시작하고 끝나며 6~12자리인지 검사
// const id = 'hello123';
// const id = 'hello';
const id = 'hello안녕';
console.log(/^[A-Za-z\d]{6,12}$/.test(id));
// [가-힣] : 완성 된 자음 모음 형태만 허용
// [ㄱ-ㅎㅏ-ㅣ가-힣] : 자음 모음 완성 된 형태 모두 포함


5. 핸드폰 번호 형식에 맞는지 검사

//const phone = '010-1234-5678';
//const phone = '010-123-5678';
const phone = '010-12345-678';

console.log(/^\d{3}-\d{3,4}-\d{4}$/.test(phone));


6. 특수문자 포함 여부

// const target2 = 'hello#world';
const target2 = 'helloworld';
console.log(/[^A-Za-z0-9가-힣]/.test(target2));

0개의 댓글