본문 바로가기

JavaScript

정규표현식

정규표현식(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