- 정규 표현식이란? (Regular Expressions)

  • 문자열에 포함된 문자 조합을 찾기 위해 사용되는 패턴이다.
  • 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어, 문자열의 검색과 치환을 위한 용도로 사용된다.

 

- 생성

-  정규 표현식 리터럴을 이용한 생성

  • 정규 표현식 리터럴은 슬래시(/) 기호로 시작하여, 슬래시(/) 기호로 끝난다. 또한, 필요에 따라 플래그를 추가하여 기본 검색 설정을 변경할 수도 있다.

- RegExp 객체를 이용한 생성

 

- 예제

var regStr = /a+bc/;             // 정규 표현식 리터럴을 이용한 생성
var regObj = new RegExp("a+bc"); // RegExp 객체를 이용한 생성
regStr;                          // /a+bc/
regObj;                          // /a+bc/

 

 

- 검색(search)

var string = "Please visit Tistory!"
var position = string.search("Tistory"); // 13
  • 변수 string에는 (검색 대상이 될) 전체 문자열이 들어있다.
  • 찾으려는 문자열은 "Tistory"이며, search()를 이용하여 그 위치를 찾는다.
  • 검색에 성공하면, 해당 단어(Tistory)의 위치값이 변수 position에 저장된다. 해당 단어가 없으면, 변수 position에 저장되는 숫자는 -1이다.
  • search()의 위치값은, 제로(0)에서부터 계산해 나간다. 이 위치값에는, 띄어쓰기한 빈칸(공백)도 포함된다.

 

 

- 플래그(flags)

  • 정규 표현식을 생성할 때 플래그를 사용하여 기본 검색 설정을 변경할 수 있다.
  • 이렇게 설정된 플래그는 나중에 추가되거나 삭제될 수 없다.
플래그 설명
i 검색 패턴을 비교할 때 대소문자를 구분하지 않도록 설정함.
g 검색 패턴을 비교할 때 일치하는 모든 부분을 선택하도록 설정함.
m 검색 패턴을 비교할 때 여러 줄의 입력 문자열을 그 상태 그대로 여러 줄로 비교하도록 설정함.
y 대상 문자열의 현재 위치부터 비교를 시작하도록 설정함.

- 예제

var targetStr = "bcabcAB";
var strReg = /AB/;              // 검색 패턴 비교 시 기본 설정으로 대소문자를 구분함.
var strUsingFlag = /AB/i;       // new RegExp("AB", "i")와 동일함.
targetStr.search(strReg);       // 5
targetStr.search(strUsingFlag); // 2 -> 대소문자를 구분하지 않고 검색함.

 

 

- 특수 문자(special characters)

  • 문자열을 찾을 때, 숫자만을 검색하거나, 띄어쓰기를 찾는 등 정확히 일치하는 패턴보다 더 복잡한 조건을 사용하려면 특수 문자를 사용해야 한다.
특수 문자 설명
\ 슬래시(\) 다음에 일반 문자가 나오면 이스케이프 문자로 해석하고, 특수 문자가 나오면 일반 문자로 해석함.
\d 숫자를 검색함. /[0-9]/와 같음.
\D 숫자가 아닌 문자를 검색함. /[^0-9]/와 같음.
\w 언더스코어(_)를 포함한 영문자 및 숫자를 검색함. /[A-Za-z0-9_]/와 같음.
\W 언더스코어(_), 영문자, 숫자가 아닌 문자를 검색함. /[^A-Za-z0-9_]/와 같음.
\s 띄어쓰기, 탭, 줄 바꿈 문자 등의 공백 문자를 검색함.
\S 띄어쓰기, 탭, 줄 바꿈 문자 등의 공백 문자가 아닌 문자를 검색함.
\b 단어의 맨 앞이나 맨 뒤가 패턴과 일치하는지를 검색함.
\xhh 16진수 hh에 해당하는 유니코드 문자를 검색함.
\uhhhh 16진수 hhhh에 해당하는 유니코드 문자를 검색함.

- 예제(\d)

var targetStr = "ab1bc2cd3de";
var reg1 = /\d/;    // 2 -> 0부터 9까지의 숫자를 검색함.
var reg2 = /[3-9]/; // 8 -> 3부터 9까지의 숫자를 검색함.

- 예제( \s, \w)

var targetStr = "abc 123";
// 공백 문자를 사이에 두는 언더스코어(_)를 포함한 영문자 및 숫자로 이루어진 문자열을 검색함.
var reg = /\w\s\w/; // c 1

 

 

- 양화사(quantifier)

  • 정규 표현식에서는 특수 문자로 수량을 나타내는 다양한 양화사를 사용할 수 있다.
괄호 설명
n* 바로 앞의 문자가 0번 이상 나타나는 경우를 검색함. /{0, }/와 같음.
n+ 바로 앞의 문자가 1번 이상 나타나는 경우를 검색함. /{1, }/과 같음.
n? 바로 앞의 문자가 0번 또는 1번만 나타나는 경우를 검색함. /{0,1}/과 같음.

- 예제

var targetStr = "Hello World!";
var zeroReg = /lo*/;          // 문자 'l' 다음에 문자 'o'가 0번 이상 나타나는 경우를 검색함.
var oneReg = /lo+/;           // 문자 'l' 다음에 문자 'o'가 1번 이상 나타나는 경우를 검색함.
var zeroOneReg = /lo?/;       // 문자 'l' 다음에 문자 'o'가 0 또는 1번만 나타나는 경우를 검색함.
 
targetStr.search(zeroReg);    // 2
targetStr.search(oneReg);     // 3
targetStr.search(zeroOneReg); // 2

 

  • 또한, 물음표(?) 기호가 정규 표현식의 양화사(*, +, ?, {}) 바로 다음에 위치하게 되면, 가능한 많은 문자를 가지도록 패턴을 찾는 기본 설정과는 달리 해당 양화사가 가능한 적은 수의 문자만을 가지는 패턴을 찾도록 변경시킨다.

- 예제

var targetStr = "123abc";
var oneReg = /\d+/;           // 숫자를 검색함. /[0-9]/와 같음.
var anotherReg = /\d+?/;      // 숫자를 검색하지만, 가능한 적은 수의 문자를 가지는 패턴을 검색함.


targetStr.search(oneReg);     // 123
targetStr.search(anotherReg); // 1

 

 

- 괄호(bracket)

괄호 설명
a(b)c 전체 패턴을 검색한 후에 괄호 안에 명시된 문자열을 저장함. (ex : "abc"를 검색한 후에 b를 저장함.)
[abc] 꺾쇠 괄호([]) 안에 명시된 문자를 검색함. (ex : "abc"를 검색함.)
[0-3] 꺾쇠 괄호([]) 안에 명시된 숫자를 검색함. (ex : 0부터 3까지의 숫자를 검색함.)
[\b] 백스페이스 문자를 검색함.
{n} 앞의 문자가 정확히 n번 나타나는 경우를 검색함. n은 반드시 양의 정수이어야만 함.
{m,n} 앞의 문자가 최소 m번 이상 최대 n번 이하로 나타나는 경우를 검색함. m과 n은 반드시 양의 정수이어야만 함.
  • \b는 단어의 맨 앞이나 맨 뒤가 패턴과 일치하는지를 검색하는 특수 문자이고, [\b]는 백스페이스 문자를 검색하는 정규표현식이다. 이 둘을 혼동해서는 안 된다.

- 예제

var targetStr = "abc 123 abc 123";
var oneReg = /(\w+) (\d+)/;
var anotherReg = /(\w+) (\d+) \1 \2/;

targetStr.match(oneReg);     // abc 123, abc, 123
targetStr.match(anotherReg); // abc 123 abc 123, abc, 123

 

 

- 위치 문자

  • 정규 표현식에서는 패턴을 검색할 단어의 위치를 지정할 수 있다.
위치 문자 설명
^a 단어의 맨 앞에 위치한 해당 패턴만을 검색함. (ex : 'a'로 시작하는 단어의 'a'만을 검색함.)
a$ 단어의 맨 뒤에 위치한 해당 패턴만을 검색함. (ex : 'a'로 끝나는 단어의 'a'만을 검색함.)

- 예제

var firstStr = "Php";
var secondStr = "phP";
var strReg = /^p/;       // 'p'로 시작하는 단어의 'p'만을 검색함.
firstStr.match(strReg);  // null
secondStr.match(strReg); // p

 


 
 


Reference

http://www.tcpschool.com/javascript/js_regularExpression_concept

 

'Programming > JavaScript' 카테고리의 다른 글

[JavaScript] BroadcastChannel API란?  (1) 2022.11.24

+ Recent posts