반응형

정규표현이란

어떤 문장에서 특정 패턴을 가지는 문자들을 찾고 싶을 활용

특정 문자들에 의미를 부여하여 표현식을 정의

정의된 표현식에 매치되는 문자열을 찾을 있다.

 

자바스크립트에서 이용이 가능한 정규표현 문자

기본 패턴 표현

ABC : ABC라는 문자열

[ABC] : A, B, C 중에 하나

[^ABC] : A, B, C 제외한 개의 문자

[A-Z] : 대문자 1

A|B|C : A,B,C중에서 하나

 

반복 패턴 표현

X* : X문자가 0 이상

X? : X문자가 0 또는 1

X+ : X문자가 1 이상

X{n} : X n 반복

X{n,} : X n 이상 반복

X{m, n} : X m~n 반복

 

위치 지정 패턴 표현

^ : 행의 시작

$ : 행의

. : 임의의 문자

\w : 어떤 문자와 일치하는 ( [A-Za-z0-9] 동일 )

\W : 문자 이외에 일치하는 ( [^\w] 동일 )

\d : 숫자

\D : 숫자 제외

\n : Line Feed 일치

\r : Carriage Return 일치

\t : 탭문자와 일치

\s : 공백 문자와 일치[\n\r\t\v\f]

\S : 공백 이외의 문자와 일치

\~ : ~ 표현되는 문자

 

RegExp 객체 생성 방법

    1. RegExp 객체의 생성자를 이용(\를 이스케이프 해야함. \가 의미를 가지고 있으므로)
        - var 변수명 = new RegExp('정규표현식', '옵션');
    2. 정규표현 리터럴 이용(/를 이스케이프 해야함. /가 정규표현 패턴의 시작과 끝을 의미함)
        - var 변수명 = /정규표현/옵션;
        - 옵션
            ○ g: 문자열 전체(지정하지 않으면 한 번만 매칭 후 종료)
            ○ i : 대문자/소문자 구분
            ○ m : 복수 행에 대응(개행을 행의 시작과 끝으로 인식)

 

matchtest1.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>정규표현</title>
</head>
<body>
<pre>
<script type="text/javascript">
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/gi;
//var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/i;
//var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/g;
var str = '서포트사이트는https://blog.itthis.me/입니다.';
str += '원래사이트HTTP://itthis.tistory.com/도 접속됩니다!';
var result = str.match(p);
for(var i = 0; i < result.length; i++){
    document.writeln(result[i]);
}
</script>
</pre>
</body>
</html>
cs

 

코드의 주석 부분을 해제 해가면서 테스트 진행(i g 옵션 의미)

 

match exec 차이

    exec 번에 실행에 하나의 실행결과만반환.

    마지막에 매치된 문자의 위치를 기억한다.

    match 같이 g(글로벌)옵션처럼 결과를 얻고 싶음 경우에는 while문으로 반복이 필요하다.

 

exectest1.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>정규표현</title>
</head>
<body>
<pre>
<script type="text/javascript">
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/gi;
var str = '서포트사이트는 https://blog.itthis.me/이다.';
str += '원래사이트HTTP://itthis.tistory.com/도 접속됩니다!';
var result = p.exec(str);
for(var i = 0; i < result.length; i++){
    document.writeln(result[i]);
}
</script>
</pre>
</body>
</html>
cs

 

exectest2.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>정규표현</title>
</head>
<body>
<pre>
<script type="text/javascript">
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/gi;
var str = '서포트사이트는 https://blog.itthis.me/이다.';
str += '원래사이트HTTP://itthis.tistory.com/도 접속됩니다!';
while((result = p.exec(str)) != null) {
    document.writeln(result[0]);
}
</script>
</pre>
</body>
</html>
cs

RegExp 객체에서 exec메서드 동작 매핑 정보를 저장하기 위해 프로퍼티가 존재함.

infotest.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>정규표현</title>
</head>
<body>
<pre>
<script type="text/javascript">
<!--
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/gi;
var str = '서포트사이트는 https://blog.itthis.me/이다.';
str += '원래사이트HTTP://itthis.tistory.com/도 접속됩니다!';
while((result = p.exec(str)) != null) {
  document.writeln(p.lastIndex + ':' + result[0]);
  document.writeln('leftContext:' + RegExp.leftContext);
  document.writeln('rightContext:' + RegExp.rightContext);
  document.writeln('lastMatch:' + RegExp.lastMatch);
  document.writeln('lastParen:' + RegExp.lastParen);
  document.writeln('$1:' + RegExp.$1);
  document.writeln('$2:' + RegExp.$2);
  document.writeln('$3:' + RegExp.$3);
  document.writeln('<hr />');
}
//-->
</script>
</pre>
</body>
</html>
cs

lastIndex: 검색을 개시하는 위치

*leftContext($`) : 마지막 매치 문자열의 문자열

*rightContext($') : 마지막 매치 문자열의 뒤로 이어지는 문자열

*lastMatch($&) : 마지막에 매치한 문자열(Opera 미대응)

*lastParen($+) : 마지막 매치된 {} 묶인 그룹의 문자열(Opera 미대응)

*$1~9 : 패턴에 매치한 문자열을 순서대로 보관(최대 9)

 

매치 성공을 검증하기 위한 test메서드도 있다.(결과를 true/false 반환)

test.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>정규표현</title>
</head>
<body>
<pre>
<script type="text/javascript">
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/gi;
var str1 = '서포트사이트는 https://blog.itthis.me/이다.';
var str2 = '원래사이트HTTP://itthis.tistory.com/도 접속됩니다!';
document.writeln(p.test(str1));
document.writeln(p.test(str2));
</script>
</pre>
</body>
</html>
cs

정규표현식에 최초로 매치된 문자 위치를 반환하는 search 메서드

searchtest.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>정규표현</title>
</head>
<body>
<pre>
<script type="text/javascript">
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/gi;
var str1 = '서포트사이트는 https://blog.itthis.me/이다.';
var str2 = '원래사이트HTTP://itthis.tistory.com/도 접속됩니다!';
document.writeln(str1.search(p));
document.writeln(str2.search(p));
</script>
</pre>
</body>
</html>
cs

정규표현식으로 치환하기 - replace메서드

replacetest.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>정규표현</title>
</head>
<body>
<pre>
<script type="text/javascript">
var p = /(http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?)/gi;
var str1 = '서포트사이트는 https://blog.itthis.me/이다.';
document.writeln(str.replace(p, '<a href="$1">$1</a>'));
</script>
</pre>
</body>
</html>
cs

 

정규표현식으로 문자열 분할하기 - split메서드

splittest.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>정규표현</title>
</head>
<body>
<pre>
<script type="text/javascript">
var p = /[\/\.\-]/gi;
document.writeln('2018/12/04'.split(p));
document.writeln('2018-12-04'.split(p));
document.writeln('2018.12.04'.split(p));
</script>
</pre>
</body>
</html>
cs

지정된 표현식에 하나라도 해당되면 문자열을 분할하여 배열로 반환함

반응형

'교육자료 > Javascript' 카테고리의 다른 글

14. Global 내장객체  (0) 2019.05.09
13. Object 내장객체  (0) 2019.05.09
11. Date 내장객체  (0) 2019.05.09
10. Array 내장객체  (0) 2019.05.09
09. Math 내장객체  (0) 2019.05.09

+ Recent posts