본문 바로가기

JavaScript

[JavaScript] 정규 표현식

728x90
반응형

정규 표현식이란?

문자열에 나타나는 특정 문자 조합과 대응시키기 위해 사용되는 패턴

자바스크립트에서 정규표현식도 객체임

여러가지 메소드와 함께 사용됨

생성

정규식 리터럴

/문자/

슬래쉬"/"로 감싸는 패턴

var re = /ab+c/;

스크립트가 불러와질 때 컴파일됨 → 정규식이 상수일 경우, 이렇게 사용하면 성능 향상

생성자 함수

new RegExp("문자");

RegExp 객체의 생성자 함수를 호출하는 방법

var re = new RegExp("ab+c");

정규식 실행 시점에 컴파일됨

  • 정규식 패턴이 변경될 수 있는 경우 사용
  • 사용자 입력과 같이 다른 출처로부터 패턴을 가져와야 하는 경우 사용

정규식 패턴 작성

단순 패턴 사용

문자열을 있는 그대로 대응시키기 위해 사용

// 문자열에서 정확히 'abc'라는 문자들이 모두 함께 순서대로 나타나야 대응 
var A = \\abc\\ 

// Hi, do you know your abc's? -> 대응 O 
// The latest airplane designs evolved from slabcraft. -> 대응 O 
// Grab crab -> 대응 X

특수 문자 사용

있는 그대로의 대응 이상을 필요로 할 경우 패턴에 특수한 문자를 포함 시킴

(검색에서 하나 이상의 b 찾거나 공백을 찾는 등)

// 'a' 문자 뒤에 0개 이상의 'b' 문자가 나타나고 바로 뒤에 'c' 문자가 나타나는 문자 조합에 대응 
var A = /ab*c/ 

// * 문자 : 바로 앞의 문자가 0개 이상이라는 뜻 
// 문자열 "cbbabbbbcdebc," 에서 부분 문자열 'abbbbc' 와 대응

\

  • 특수 문자가 아닌 문자(non-special character) 앞
    해당 문자는 특별하고, 문자 그대로 해석되면 안된다는 의미
    ex) 앞에 \가 없는 'b'는 보통 소문자 b가 나오는 패턴과 대응이 문자는 특별한 단어 경계 문자를 형성
    But '\b' 자체는 어떤 문자와도 대응되지 X
  • 특수 문자
    다음에 나오는 문자는 특별하지 X, 문자 그대로 해석된다는 의미
    ex) /a*/ 에서 특수문자 '*'는 0개 이상의 'a' 문자가 등장함을 의미
    But 패턴 /a\/ 는 ''이 특별하지 않다는 것을 의미, *'a'와 같은 문자열과 대응될 수 O
RegExp("pattern") 표기를 쓰면서 \ 자체를 이스케이프해야 함
(\는 문자열에서도 이스케이프 문자)
ex) /a\/ 와 같은 패턴을 생성자로 만들 시, new RegExp('a\\*')

^

입력 시작 부분에 대응

(if 다중행 플래그가 참으로 설정 → 줄 바꿈 문자 바로 다음 부분과도 대응)

ex) /^A/ 는 "an A" 의 'A'와는 대응되지 X, But "An E" 의 'A'와는 대응

문자셋([abc]) 패턴의 첫 글자로 쓰일 시, 전혀 다른 의미가 됨
자세한 내용은 역문자셋 참고

$

입력 끝 부분과 대응

(if 다중행 플래그가 참으로 설정 → 줄 바꿈 문자 바로 앞 부분과도 대응)

ex) /t$/ 는 "eater" 의 't'에는 대응되지 X, But "eat" 과는 대응

*

앞의 표현식이 0회 이상 연속으로 반복되는 부분과 대응

({0,} 와 같은 의미)

ex) /bo*/ 는 "A ghost booooed" 의 'boooo', "A bird warbled" 의 'b'에 대응

But "A goat grunted" 내의 어느 부분과도 대응되지 X

+

앞의 표현식이 1회 이상 연속으로 반복되는 부분과 대응

({1,} 와 같은 의미)

ex) /a+/ 는 "candy"의 'a', "caaaaaaandy" 의 모든 'a'들에 대응

But "cndy" 내의 어느 부분과도 대응되지 X

더 다양한 특수문자

정규 표현식 - JavaScript | MDN

위의 링크에서 확인 가능

사용

test

대응되는 문자열이 있는지 검사하는 RegExp 메소드

true/false 반환

search

대응되는 문자열이 있는지 검사하는 String 메소드

대응된 부분의 인덱스 반환

대응되는 문자열을 찾지 못했다면 -1 반환

exec, match

대응되는 문자열을 찾는 RegExp 메소드

정보를 가지고 있는 배열 반환, 정규식 객체의 속성 업데이트

대응되는 문자열을 찾지 못했다면 null 반환

test나 search보다 더 많은 정보를 원할 때 사용 (대신, 실행이 느림)

replace

대응되는 문자열을 찾아 다른 문자열로 치환하는 String 메소드

split

정규식 혹은 문자열로 대상 문자열을 나누어 배열로 반환하는 String 메소드

참고 사이트

정규 표현식 - JavaScript | MDN

728x90
반응형