javascript 정규 표현식
정규표현식을 이용하는 함수는 크게 두가지가 있습니다.
하나는 test() 이고, 또 하나는 replace() 입니다.
test는 str의 패턴이 정규식과 일치하는지를 검증하는 함수이고, replace는 특정문자열이 정규식과 일치할 경우 다른 문자열로 변환하는 것입니다.
예)
1. test()
var regx = /^\d{5}$/; // 숫자로 시작되며 5자리 숫자로 구성되어 있는 경우
if (regx.test(str)) {
alert("정규식과 일치합니다.");
} else {
alert("정규식과 일치하지 않습니다.");
}
2. replace()
var regx = /^\d{5}$/;
var reStr = str.replace(regx, "aaa"); // str이 정규식과 일치할 경우 "aaa"로 변환하여 reStr에 저장됨
정규표현식 형식
정규 표현식은 / / 사이에 쓰여지며, ' ' 이나 " " 은 사용하지 않습니다.
정규표현식 예
/^\d{5}$/;
^ 은 문자열의 시작을 의미합니다. 즉, 다음에 나올 정규표현식으로 시작되는 문자열을 의미합니다.
\d 는 숫자를 의미합니다.
{5} 는 바로 앞 정규표현식(\d)를 다섯번 반복한다는 의미입니다. 즉 숫자가 5번 반복되는경우입니다. 같은 숫자일 필요는 없습니다.
$ 는 정규표현식의 끝을 의미합니다.
해석하지면, 숫자로 시작하며, 숫자가 5번 반복되는 경우가 됩니다.
. newline 이외의 어떤 문자와도 일치합니다.
\d 숫자를 의미히합니다.
\D 숫자가 아닌 문자를 의미합니다.
\s 공백문자와 일치합니다. 스페이스, 탭, 줄바꿈, 리턴키
\w 문자와 숫자를 의미합니다.
^ 패턴의 시작을 의미 합니다.
$ 패턴의 끝을 알립니다.
/cat$/ cat의 끝나는 문자열 "tomcat"
/^\d/ 숫자로 시작되는 문자열 "1aaaa", "22232a"
/\d\d\d/ 세자리 숫자가 포함된 문자열 "a112bb", "112aa", "dfdf222"
/^cat/ cat으로 시작되는 문자열 "catch2"
/\d\d$/ 두자리 숫자로 끝나는 문자열 "dffdf76"
우리나라 주민번호를 검증하는 정규표현식
/^\d\d[0-1]\d[0-3]\d-[1-4]\d{6}$/
처음 두자리는 아무숫자나올수 있고, 세번째는 0-1(월의앞지리), 네번재는 아무숫자,
다섯번째는0-3(일의앞자리), 여섯번째는 아무숫자,
-
첫번째는 1-4 (1,3은 남자, 2,4는 여자)
나머지는 아무숫자6자리
물론 이렇게 해서 주민번호를 조합할순 없습니다 ^^;; 주민번호에는 특정공식이 들어가기 때문이죵.
수량한정자
* 선행 하위 패턴은 0 혹은 그 이상 와야합니다. 0이니 안올수도 있죠
{n} 선행 하위 패턴이 n번 만큼 반복됩니다.
{min, max} min 이상 max 이하의 반복입니다.
+ 선행 하위 패턴은 1번 혹은 그 이상 와야합니다.
? 선행 하위 패턴은 0혹은 1번만 와야 합니다.
() 그룹문자를 만듭니다. 일반적으로 정규식은 한문자씩 검증하는데 ()로 묶으면 여러 문자를
그룹으로 묶을 수 있습니다. 예 (hot)
/\w*/ 문자혹은 숫자가 0번이상 반복됩니다.
/.+/ 뉴라인을 제외한 모든 문자가 1번이상 반복됩니다.
/(Hot)? ?Dog/ Hot Dog, HotDog, Dog, (공백)Dog 와 일치합니다.
휴~ 아직 끝나지 않았습니다. ^^;; 물론 위에 것만 알아도 웬만한 정규표현식을 구현하는데 별 문제는 없습니다.
대체 메타문자
this|that this 혹은 that과 일치하는 경우를 의미합니다.
/small|medium|large/ 세단어 중 하나가 포함된 문자열과 일치합니다.
/(red|blue) pill/ red pill, blue pill 과 일치합니다.
[출처]Javascript 정규표현식