Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 compile() 메서드 완벽 가이드 – 정규 표현식 재컴파일 방법과 예제


compile() 메서드란?

자바스크립트의 compile() 메서드는 스크립트가 실행되는 도중에 정규 표현식(Regular Expression)을 다시 컴파일하는 데 사용됩니다. 이미 생성된 RegExp 객체의 패턴을 실행 중에 변경하고 싶을 때 활용할 수 있습니다.

주의: 이 메서드는 JavaScript 1.5부터 공식적으로 폐기(deprecated)되었습니다. 따라서 최신 개발 환경에서는 사용을 권장하지 않으며, 대신 새로운 RegExp 객체를 생성하거나 RegExp 생성자에 패턴을 직접 전달하는 방식으로 대체하는 것이 좋습니다.

compile() 메서드 예제

다음은 compile() 메서드를 사용해 정규 표현식을 재컴파일하는 코드입니다 −

<!DOCTYPE html>
<html>
<head>
<style>
   body {
      font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
   }
</style>
</head>
<body>
<h1>compile() Method</h1>
<p class="sample">
That man won the race and the woman over there came second
</p>
<h3>After compile()</h3>
<p class="result"></p>
<button class="Btn">Click Here</button>
<h3>Click the above button to use compile the regex to make changes</h3>
<script>
   let sampleEle = document.querySelector(".sample");
   let result = document.querySelector(".result");
   document.querySelector(".Btn").addEventListener("click", () => {
      var str = sampleEle.innerHTML;
      var pattern = /man/g;
      var str2 = str.replace(pattern, "person");
      result.innerHTML = str2 + "<br>";
      pattern = /(wo)?man/g;
      pattern.compile(pattern);
      str2 = str.replace(pattern, "person");
      result.innerHTML += str2;
   });
</script>
</body>
</html>

코드 설명

위 예제의 동작 과정을 살펴보면 다음과 같습니다.

  • 처음에는 /man/g 패턴을 적용하여 문장 속 모든 "man"을 "person"으로 치환합니다.
  • 이후 패턴을 /(wo)?man/g으로 변경하고 compile() 메서드로 재컴파일하면, "woman"까지 함께 매칭되어 "wo" 부분을 포함한 단어 전체가 "person"으로 치환됩니다.
  • 즉, compile()을 통해 기존 RegExp 객체를 새로 만들지 않고도 패턴을 갱신할 수 있었던 것입니다.

실행 결과

페이지 로드 시 초기 화면은 아래와 같습니다.

자바스크립트 compile() 메서드 완벽 가이드 – 정규 표현식 재컴파일 방법과 예제

"Click Here" 버튼을 클릭하면 −

자바스크립트 compile() 메서드 완벽 가이드 – 정규 표현식 재컴파일 방법과 예제

첫 번째 줄에는 /man/g 패턴의 치환 결과가, 두 번째 줄에는 /(wo)?man/g 패턴으로 재컴파일한 후의 치환 결과가 출력됩니다.

정리 및 대체 방법

compile() 메서드는 과거에 정규 표현식을 동적으로 갱신하는 용도로 사용되었지만, 현재는 폐기된 기능입니다. 현대적인 자바스크립트 코드에서는 다음과 같이 새 RegExp 객체를 생성하는 방식을 사용하는 것이 안전합니다.

let pattern = new RegExp("(wo)?man", "g");
let result = str.replace(pattern, "person");