정규표현식(Regular Expression)
정규표현식은 문자를 검색하거나 대체하거나 추출하는 패턴입니다.
정규표현식을 만드는 방법은 생성자 방식과 리터럴 방식이 있습니다.
[생성자 방식]
// new RegExp('표현', '옵션')
new RegExp('[a-z]', 'gi')
생성자 방식은 RegExp 클래스를 사용하여 정규식을 만드는 방식으로, 표현과 옵션을 통해 문자 검색이 가능합니다.
const str = `
010-1234-1234
nicehyun12@tistory.com
Hello world!
The quick brown fox jumps over the lazy dog.
there!!
`;
const regexp = new RegExp("the", "");
console.log(str.match(regexp));
RegExp 클래스의 첫 번째 인수로는 찾고자 하는 문자를 작성하여 전달하고 반환되는 인스턴스를 상수에 할당하여 match 메서드의 인수로 전달해 주었습니다.

문자열 str에 정규식 regexp를 매치시켜주게 되면 위의 결과를 확인할 수 있으며, index는 전달한 정규식이 위치한 인덱스를 나타내줍니다.
해당 문자열에 the라는 문자는 총 3개가 존재하지만 별도의 옵션을 별도로 추가해주지 않았기 때문에 가장 먼저 찾은 문자를 찾아 유사 배열을 반환이 되었습니다.
const regexp = new RegExp("the", "g");

RegExp 클래스의 두 번째 인수로 옵션 g를 전달하게 되면 문자열에서 the 모두 찾아 배열 데이터를 반환하게 됩니다.
*대소문자를 구분하여 찾습니다.
const regexp = new RegExp("the", "gi");

추가적으로 옵션에 i를 전달하게 되면 대소문자 구분 없이 the를 찾아 배열 데이터로 반환하게 됩니다.
[리터럴 방식]
// /표현/옵션
/[a-z]/gi
리터럴 방식은 / 와 / 사이에 표현이 들어가고 두 번째 / 뒤에 옵션을 추가하여 정규식을 만드는 방식입니다.
*많은 경우 리터럴 방식을 사용하지만 간혹 생성자 방식을 사용해야 하는 패턴도 존재합니다.
const regexp = /the/gi;

리터럴 방식은 표현과 방식을 별도의 문자열로 전달하는 것이 아니고 / 기준으로 표현과 옵션을 전달하며 동일한 결과를 확인할 수 있습니다.
정규표현식에서 아래의 메서드를 사용할 수 있습니다.
const str = `
010-1234-1234
nicehyun12@tistory.com
Hello world!
The quick brown fox jumps over the lazy dog.
there!!
`;
- test : 정규 표현식이 메서드의 인수로 전달하는 문자열에 있는지 없는지의 일치 여부를 반환합니다.
const regexp = /fox/gi;
console.log(regexp.test(str)); // 일치 여부 반환
문자열에서 정규식과 일치하는 문자를 찾지 못하면 false를 반환합니다.
- match : 문자열에서 메서드의 인수로 전달하는 정규식에 일치하는 문자를 찾아 배열로 반환합니다.
const regexp = /fox/gi;
console.log(str.match(regexp)); // ['fox'] (일치하는 문자의 배열 반환)
정규식을 문자열에서 찾지 못하면 null을 반환합니다.
- replace : 문자열에서 메서드의 첫 번째 인수로 전달하는 정규식과 일치하는 문자를 찾아 두 번째 인수로 전달하는 대체 문자로 대체합니다.
const regexp = /fox/gi;
console.log(str.replace(regexp, "cat"));

정규식과 일치하는 문자를 찾지 못하면 문자는 교체되지 않고 기존의 문자열만 반환합니다.
정규식에 아래와 같은 옵션이 있습니다.
const str = `
010-1234-1234
nicehyun12@tistory.com
Hello world!
The quick brown fox jumps over the lazy dog.
there!!
`;
- g (global) : 정규식과 일치하는 모든 문자를 찾습니다.
const regexp = /the/g;
console.log(str.match(regexp)); // ['the', 'the'] 반환 (일치하는 모든 문자)
- i (ignore case) : 영어 대소문자를 구분하지 않고 일치하는 문자를 찾습니다.
const regexp = /the/gi;
console.log(str.match(regexp));
//['The', 'the', 'the'] 반환 (대소문자 상관없이 일치하는 모든 문자)
- m (Multi line) : 하나의 문장에 여러 줄이 들어있을 때 각각의 줄을 시작과 끝으로 인식하도록 만듭니다.
const regexp = /\.$/gi;
console.log(str.match(regexp)); // null 반환
이스케이프 문자를 사용하여 .이 문장의 끝에 있는지 확인하게 되면 해당 문자열 끝에는 .이 없기 때문에 null을 반환합니다.
const regexp = /\.$/gim;
console.log(str.match(regexp));
// ['.'] 반환 (문장이 여러줄로 구성되어 있다면 각각의 줄을 시작과 끝으로 인식)
이때 m옵션을 사용하면 여러 줄로 구성된 문장의 각각의 줄을 시작과 끝으로 인식하게 하여 .을 찾게 합니다.
정규표현식 패턴

'JavaScript' 카테고리의 다른 글
Closure (0) | 2022.12.25 |
---|---|
클래스 (0) | 2022.12.24 |
JavaScript 동작 원리(동기와 비동기) (0) | 2022.12.23 |
Memory Leak (0) | 2022.12.23 |
Garbage Collection (0) | 2022.12.23 |