자바 스크립트 정규표현식

2023. 2. 7. 15:22자바스크립트/기본

정규표현식


정규표현식 만들기

const re = /ab+c/
  • 정규 표현식 리터럴은 스크립트를 불러 올 때, 컴파일 됨 ⇒ 바뀔 일이 없는 패턴의 경우 리터럴을 사용하면 성능이 향상될 수 있음.

RegExp 객체의 생성자 호출.

const re = new RegExp('ab+c')
  • 생성자 함수를 사용 → 정규 표현식이 런타임에 컴파일 됨
  • 바뀔 수 있는 패턴이나, 사용자 입력 등 외부 출처에서 가져오는 패턴의 경우 이렇게 사용하세요.

단순 패턴 vs 특수 문자

단순 패턴

/abc/ → 문자열에서 정확한 순서로 “abc” 라는 문자의 조합이 나타나는 부분과 일치함

 

ex)

"Hi, do you know your abc's?”

"The latest airplane designs evolved from slabcraft.”

 

특수 문자

하나 이상의 “b”를 찾는다? 공백 문자를 찾는 등 직접적인 일치 이상의 탐색이 필요할 땐 특수 문자를 사용함

/ab*c/ → 하나의 “a” 이후에 0개 이상의 “b” 그 뒤의 “c” 와 일치함

ex) “cbbabbbbcdebc” ⇒ abbbbc

 

Assertions

  • 행이나 단어의 시작- 끝을 나타내는 경계와 → 어떤 식으로든 매치가 가능한 것을 나타내는 다른 패턴이 포함
const text = 'A quick fox';

const regexpLastWord = /\w+$/;
console.log(text.match(regexpLastWord));
// expected output: Array ["fox"]

const regexpWords = /\b\w+\b/g;
console.log(text.match(regexpWords));
// expected output: Array ["A", "quick", "fox"]

const regexpFoxQuality = /\w+(?= fox)/;
console.log(text.match(regexpFoxQuality));
// expected output: Array ["quick"]

Character classes

  • 문자열 클래스는 문자를 구별한다.

quantifiers

수량자는 일치시킬 문자 또는 표현식의 수를 나타냅니다.

const ghostSpeak = 'booh boooooooh';
const regexpSpooky = /bo{3,}h/;
console.log(ghostSpeak.match(regexpSpooky));
// expected output: Array ["boooooooh"]

const modifiedQuote = '[He] ha[s] to go read this novel [Alice in Wonderland].';
const regexpModifications = /\[.*?\]/g;
console.log(modifiedQuote.match(regexpModifications));
// expected output: Array ["[He]", "[s]", "[Alice in Wonderland]"]

const regexpTooGreedy = /\[.*\]/g;
console.log(modifiedQuote.match(regexpTooGreedy));
// expected output: Array ["[He] ha[s] to go read this novel [Alice in Wonderland]"]

자바 스크립트 정규표현식 메소드

메서드 설명
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec 문자열에서 일치하는 부분을 탐색합니다. 일치 정보를 나타내는 배열, 또는 일치가 없는 경우 null을 반환합니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test 문자열에 일치하는 부분이 있는지 확인합니다. true 또는 false를 반환합니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/match 캡처 그룹을 포함해서 모든 일치를 담은 배열을 반환합니다. 일치가 없으면 null을 반환합니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAllhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAllhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll 캡처 그룹을 포함해서 모든 일치를 담은 반복기를 반환합니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/search 문자열에서 일치하는 부분을 탐색합니다. 일치하는 부분의 인덱스, 또는 일치가 없는 경우 -1을 반환합니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/replace 문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 바꿉니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAllhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAllhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll 문자열에서 일치하는 부분을 모두 탐색하고, 모두 대체 문자열로 바꿉니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/split 정규 표현식 또는 문자열 리터럴을 사용해서 문자열을 부분 문자열의 배열로 나눕니다.
- 문자열 내부에 패턴과 일치하는 부분이 존재하는지만 알아내려면 test()search()메서드를 사용  
- 일치에 관한 추가 정보가 필요하면 exec()match() 메서드를 사용  
const myArray = /d(b+)d/g.exec('cdbbdbsbz');
// 'cdbbdbsbz'.match(/d(b+)d/g); 와 비슷하지만,
// 'cdbbdbsbz'.match(/d(b+)d/g)의 반환 값은 [ 'dbbd' ]인 반면
// /d(b+)d/g.exec('cdbbdbsbz')의 반환 값은 [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]