정규식이란 특정한 규칙을 가지는 문자열을 표현하는 언어이다.
정규표현식이라는 문구는 문자열이 준수해야하는 패턴을 표현하기 위한 텍스트 표현식이다. 정규표현식의 각 문자는 메타문자(특별한 의미로 해석되는 문자)와 정규 문자(리터럴 문자)로 구성된다.
간단한 정규표현식의 예시를 보자.
//"abc"와 일치하는 패턴이 있는지 확인한다.
var regex = /abc/;
regex.test("abc"); //true
regex.test("abcd"); //true
regex.test("bcd"); //false
//a와 c사이에 b가 0개이상 존재하는지 검사한다.
regex = /ab*c/;
regex.test("abc"); //true
regex.test("ac"); //true
regex.test("ab"); //false
regex.test("adc"); //false
regex.test("abdc");//false
정규식 생성 방법
리터럴이나 생성자를 사용하여 정규식을 생성할 때 아래와 같은 형태로 생성할 수 있다.
/pattern/flags
new RegExp(pattern[, flags])
RegExp(pattern[, flags])
여기서 패턴(pattern)은 정규표현식의 패턴이거나 또다른 RexExp 객체를 말한다. 그렇다면 flags에 대해서도 알아보자.
flags
플래그를 지정하면 다음 값의 조합을 가질 수 있다.
g: 첫번째 매칭에서 멈추지 않고 전체에 대해 매칭한다.
i: 대소문자를 구분하지 않는다.
m: 시작 또는 끝 행의 매칭이 여러 라인에 대해 매칭할 수 있도록 한다.
u: 유니코드로 패턴을 매칭한다.
y:
정규식 생성
1) 리터럴 방식
var regExp = /ab+c/i;
2) 생성자 방식
var regExp = new RegExp('ab+c', 'i');
var regExp = new RexExp(/ab+c/, 'i');
정규식에서 특별한 의미를 갖는 문자들.
. : 라인 관련 시퀀스(\n, \r, \u2028, \u2029)를 제외하고 문자 하나와 매칭되는 문자.
var regExp = /.a/;
regExp.test("a"); // false
regExp.test("ba"); // true
regExp.test("bba"); // true
^: 문자열 시작에 매칭됨.
var regExp = /^a/;
regExp.test("a"); //true
regExp.test("abc"); //true
regExp.test("b"); //false;
$ : 문자열 끝에 매칭됨.
var regExp = /a$/;
regExp.test("a"); //true
regExp.test("ba"); //true;
regExp.test("ab"); //false;
\d: 숫자와 매칭됨.
var regExp = /\d/;
regExp.test("1"); // true
regExp.test("aa1"); // true
regExp.test("aaa"); // false
[xyz] : 문자셋. 괄호안의 이스케이프 시퀀스를 포함한 어떤 한 문자에 일치하는지 확인. 점(.) 또는 별포(*) 같은 경우는 문자셋내에서는 특수문자가 아니므로 이스케이프 할 필요가 없다.
//특수문자 체크 정규식.
var regExp =/[~!@\#$%<>^&*\()\-=+_\’]/;
regExp.test("1");// false;
regExp.test("123456");// false;
regExp.test("@");// true;
regExp.test("1!2@3#4$5%");// true;
[^xyz]: 문자셋 외에 일치하는 패턴이 있는지 검사.
//숫자로만 이루어진지 체크하는 정규식.
var regExp =/^[0-9]*$/;
regExp.test("1");//true;
regExp.test("1111");//true;
regExp.test("abc");//false;
regExp.test("111aaa");//false;
참고: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp