Programming Language/Javascript, ...

[JavaScript] 정규 표현식

Ma_Sand 2022. 4. 26. 09:37
반응형

정규표현식(REGEX/REGEXP: Regular Expression)

   : 특정 패턴을 가진 문자열을 찾거나 변경할 때 사용하는 형식 언어이다.

  - 문자열에 대해 특정 패턴의 조건을 검사하거나 변경할 때 복잡한 조건을 제시하지 않고 간단하게 처리할 수 있다.

  - JavaScript 외에 Java, Oracle 등 다른 언어에서도 사용할 수 있다.

 

 

 

 

정규 표현식 객체 생성 방법

 방법1. 생성자 구문으로 작성한다.

var regExp = new RegExp("script");

 

 방법2. 정규식 변수를 선언한다.

var regExp = /script/;

 

 

 

 

정규 표현식과 관련된 메소드

var sub1 = "javascript jquery ajax";
var sub2 = "java oracle html css";

 

1. RegExp 객체에서 제공하는 메소드 - 정규식.메소드(문자열)

  1) 정규식.test(문자열)

     : 문자열에서 정규식 값과 일치하는 값이 있으면 true, 없으면 false를 반환한다.

document.getElementById("div1").innerHTML += regExp.test(sub1) + "<br>";  // true
document.getElementById("div1").innerHTML += regExp.test(sub2) + "<br>";  // false

 

 

  2) 정규식.exec(문자열)  *

     : 문자열에서 정규식 값과 일치하는 값이 있으면 처음에 매칭된 문자열을 반환하고,

        일치하는 값이 없으면 null을 반환한다.

document.getElementById("div1").innerHTML += regExp.exec(sub1) + "<br>";  // script
document.getElementById("div1").innerHTML += regExp.exec(sub1) + "<br>";  // null

 

 

 

2. String 객체에서 제공하는 메소드 - 문자열.메소드(정규식)

  1) 문자열.match(정규식)

     : 문자열에서 정규식 값과 일치하는 값을 찾아서 반환한다.

document.getElementById("div1").innerHTML += sub1.match(regExp) + "<br>";  // script

 

 

  2) 문자열.search(정규식)

     : 문자열에서 정규식 값과 일치하는 값이 있으면 그 일치하는 값의 시작인덱스값을 반환하고,

        일치하는 값이 없으면 -1을 반환한다.

document.getElementById("div1").innerHTML += sub1.match(regExp) + "<br>";  // 4
// 문자 하나씩 인덱스에 들어가므로 'j', 'a', 'v', 'a', 's', ...
// script의 's'는 4번째 인덱스에 있다.

 

 

  3) 문자열.replace(정규식, 바꿀 값)  *

     : 문자열에서 정규식 값과 일치하는 첫 번째 부분만을 바꿀 값으로 변경하여 반환한다.

document.getElementById("div1").innerHTML += sub1.replace(regExp, '스크립트') + "<br>";
// java스크립트 jquery ajax

 

 

  4) 문자열.split(정규식)

     : 정규식에 지정된 값을 구분자로 하여 쪼개진 값들이 담겨있는 배열을 반환한다.

document.getElementById("div1").innerHTML += sub1.split(regExp) + "<br>";
// java, jquery ajax

 

 

 

 

메타 문자

   : 정규식을 검색 조건으로 설정하기 위해 특정 패턴을 제시할 때 메타 문자를 사용한다.

      문자열이 해당 정규식으로 제시한 패턴에 조건이 만족하는지 확인하기 위해

      test() 메소드를 통해 검사하거나 replace() 메소드를 통해 치환한다.

 

var zone = document.getElementById("zone");
var str = "javascript jquery ajax";

 

1. 메타 문자가 없을 때

var regExp = /a/;
zone.innerHTML += regExp.test(str) + "<br>";  // true
zone.innerHTML += str.replace(regExp, '*');  // j*vascript jquery ajax

 

 

 

2. 메타 문자가 있을 때

  1) ^ : 시작

regExp = /^j/;  // j로 시작
console.log(str.replace(regExp, '*'));  // *avascript jquery ajax

 

  2) [] : [] 내의 문자 중에 하나라도 존재하면 치환한다.

regExp = /[apq]/;  // a, p, q 중 하나라도 있으면
console.log(str.replace(regExp, '*'));  // j*vascript jquery ajax

 

  3) $ : 끝

regExp = /x$/;  // x로 끝
console.log(str.replace(regExp, '*'));  // javascript jquery aja*

 

  4) . : 개행 문자를 제외한 모든 문자(영문자나 숫자, 한글, 특수문자)

 regExp = /^j.+x$/;  // j로 시작해서 x로 끝나되 개행문자를 제외한 모든 문자가 한 글자 이상
 console.log(str.replace(regExp, '*'));  // *

 

  5) + : 한 글자 이상

       * : 0글자 이상

       ? : 0글자나 1글자(2글자 이상 불가)

 

  8) {n} : n글자

      {n, m} : n~m자 이내

      {n,} : n글자 이상

      {,m} : m글자 이하

 

  9) \d : 숫자([0-9]와 동일)

      \D : 숫자를 제외한 모든 문자

      \w : 영문자나 숫자, _

      \W : 영문자와 숫자, _를 제외한 모든 문자

      \s : 띄어쓰기와 탭, 줄바꿈 등 공백 문자

      \S : 공백 문자를 제외한 모든 숫자

 

 

 

 

플래그 문자

var str = "javaScript jQuery Ajax";

 

1. i

   : 대소문자를 불문하고 비교를 수행한다.

var regExp = /a/i;
console.log(str.replcae(regExp, "*"));  // j*vaScript jQuery Ajax

 

 

 

2. g

   : 문자열 내의 모든 패턴을 찾는다.

  - 여러 줄일 때 개행된 줄엔 g가 적용되지 않는다.

var regExp = /a/g;
console.log(str.replcae(regExp, "*"));  // j*v*Script jQuery Aj*x

 

 

 

3. m

   : 여러 줄에 대해 비교를 수행한다.

str = "JavaScript\nJQuery\nAjax";  // 개행

var regExp = /a/m;
console.log(str.replcae(regExp, "*"));  
// *avaScript
// JQuery
// Ajax
반응형