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