2018년 6월 12일 화요일

[JavaScript 예제] 055 정규 표현 사용



분류 패턴 매칭하는 문자열
기본 xyz 'xyz'라는 문자열
[xyz] x, y, z 중 1개의 문자
[^xyz] x, y, z 이외의 1개의 문자
[a-z] a~z 사이의 1개의 문자
x|y|z x, y, z 중 하나
양 지정 x* 0문자 이상의 x("to*"는 "t", "to", "too" 등에 일치)
x? 0또는 1문자의 x("to?"는 "t", "to"에 일치)
x+ 1문자 이상의 x("to+"는 "to", "too" 등에 일치)
x{n} x와 n회 일치("[0-9]{4}"는 4자리 숫자)
x{n,} x와 n회 이상 일치("[0-9]{4,}"는 4자리 이상의 숫자)
x{m,n} x와 m~n회의 일치("[0-9]{2,4}"는 2~4자리 숫자)
위치 지정 ^ 앞부분이 일치
$ 끝부분이 일치
문자 세트 . 임의의 1문자에 일치
\w 대문자/소문자의 영문자, 숫자, 언더스코어(_)에 일치
("[A-Za-z0-9_]"와 동일)
\W 문자 이외에 일치("[^\w]"와 동일)
\d 숫자에 일치("[0-9]"와 동일)
\D 숫자 이외에 일치("[^0-9]"와 동일
\n 개행(라인 피드)에 일치
\r 복귀(캐리지 리턴)에 일치
\f 폼피드에 일치
\t 탭 문자에 일치
\v 수직 탭에 일치
\s 공백 문자에 일치("[\n\r\t\v\f]"와 동일)
\S 공배 이외의 문자에 일치("[^\s]"와 동일)
\~ '~'에서 나타내는 문자


JavaScript에서 이들의 정규 표현식 패턴을 해석하고 검색 등 기능을 제공하는 것은 RegExp 객체의 역할이다.


  • RegExp 생성자
    • var 변수 = new RegExp(정규표현, 옵션)
  • 정규 표현 리터럴
    • var 변수 = /정규 표현/옵션



  • 정규 표현식 옵션
    • g
      • 문자열 전체에 매치하는가
    • i
      • 대문자/소문자의 구분을 무시하는가
    • m
      • 개행 코드를 행 첫머리/행의 끝으로 인식하는가(여러행일 경우)



 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>정규 표현</title>
</head>
<body>
  <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
  <script>
  // test 메소드
  var ex = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/gi;
  var str1 = '샘플 파일은 http://www.Infopub.co.kr/에서 다운로드 할 수 있음';
  var str2 = '질문은 "게시판"으로 부탁드림';
  console.log(ex.test(str1)); // 결과 : true
  console.log(ex.test(str2)); // 결과 : false

  // search 메소드
  console.log(str1.search(ex)); // 결과 : 7
  console.log(str2.search(ex)); // 결과 : -1

  // match
  var str = str1;
  str += '질문은 HTTP://www.infopub.co.kr/로 부탁함';

  var result = str.match(ex);
  for(var i=0, len = result.length; i<len; i++) {
    console.log(result[i]);
  }
  // 결과
  // http://www.Infopub.co.kr/
  // HTTP://www.infopub.co.kr/

  // 정규 표현으로 문자열 치환
  var ex1 = /(http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?)/gi;
  console.log(str1.replace(ex1, '<a href="$1">$1</a>'));
  // 결과 : 샘플 파일은 <a href="http://www.Infopub.co.kr/">http://www.Infopub.co.kr/</a>에서 다운로드 할 수 있음

  // 정규 표현으로 문자열 문할
  var ex2 = /[\s\n\t]/gi;
  console.log('JavaScript Project'.split(ex2));     // 결과 : (2) ["JavaScript", "Project"]
  console.log('JS\n커뮤니티'.split(ex2));           // 결과 : (2) ["JS", "커뮤니티"]
  console.log('JS      Power프로젝트'.split(ex2));  // 결과 : (7) ["JS", "", "", "", "", "", "Power프로젝트"]
  </script>
</body>
</html>





댓글 없음:

댓글 쓰기