TIL 16. Java Script - Regular Expression

어제 정리했던 Date 객체에 이어 웹 문서 작성 시 유용하게 쓰이는 정규표현식(Regular Expression)을 공부했다.



정규 표현식

정규표현식(Regular Expression)은 '문자열'에서 특정 문자나 내용을 찾거나 대체 또는 추출하는 데에 사용되는 식이다. 예를 들어 웹 사이트 가입 시 아이디나 비밀번호를 입력할 때 조건에 맞지 않는 문자를 작성했는지 확인하는 방법에 활용될 수 있다.
정규표현식은 사용이 간단하여 controls statement와 같은 복잡한 코드를 짜지 않아도 된다는 장점이 있지만 공백을 허용하지 않으면서 여러가지 기호를 혼합해 사용하기 때문에 가독성이 좋지 않다.

표기법

  • 리터럴 표기법
/pattern/flag 

'/'기호로 시작과 끝을 나타내고 그 사이에는 찾고자 하는 문자의 패턴, 그리고 선택적으로 플래그를 뒤에 붙여 찾는 방식의 옵션을 넣을 수도 있다.

생성 방식

  • 리터럴 방식
let reEx = /pattern/flag  

'/'기호로 시작과 끝을 나타내고 그 사이에는 찾고자 하는 문자의 패턴, 그리고 선택적으로 플래그를 뒤에 붙여 찾는 방식의 옵션을 넣을 수도 있다.

  • 생성자 함수 방식
new RegExp('pattern', 'flag');
new RegExp(/pattern/flag);

주로 리터럴 방식을 사용하지만 RegExp를 사용 할 수도 있다. 정규식의 패턴이 변경될 수 있는 경우, 혹은 사용자 입력과 같이 다른 출처로부터 패턴을 가져와야 하는 경우 사용한다.



메소드

정규 표현식에서 사용되는 메소드는 정규표현식 메소드와 정규표현식의 적용 대상이 되는 문자열에 대한 메소드로 나누어 진다.

정규표현식 메소드

let targetStr = 'Something is happening'
let regExp = /ing/ig;
  • RegExp.exec() - 어떤 문자열에서 정규표현식과 일치하는 문자열 검색을 수행해 배열이나 null을 반환한다.
regExp.exec(targetStr)  // ["ing", index: 6, input: "Something is happening"]
  • RegExp.test() 대상 문자열 속에 일치하는 문자열이 포함되어 있는지 검사하고 true 또는 false를 반환한다.
regExp.test(targetStr)  // true

문자열 메소드

let targetStr = 'Something is happening'
let regExp = /ing/ig;
  • String.match() - 문자열이 정규식과 매치되는 부분을 검색한다.
targetStr.match(regExp);  // ["ing", "ing"]
  • String.replace() - 대응되는 문자열을 찾아 다른 문자열로 치환한다.
targetStr.replace(regExp, 'ING');  // "SomethING is happenING"
  • String.search() - 대응되는 문자열이 있는지 검사해 대응된 부분의 인덱스를 반환한다. 대응되는 문자열을 찾지 못했다면 -1을 반환한다.
targetStr.search(regExp);  // 6
  • String.split() - 정규식 혹은 문자열로 대상 문자열을 나누어 배열로 반환한다.
targetStr.split(regExp);  // ["Someth", " is happen", ""]


패턴(Pattern)

패턴에는 타겟이 되는 문자열에서 검색하고 싶은 문자열의 조건을 지정한다. 패턴은 특별한 의미를 가지는 메타문자(Metacharacter) 또는 기호로 표현할 수 있다.

정규 표현식 패턴 Reference >



플래그(Flag)

플래그는 정규표현식에 선택적으로 사용하는 옵션이다. 플래그를 사용하지 않은 경우 문자열 내 검색 매칭 대상이 1개 이상이더라도 첫번째 매칭한 대상만을 검색하고 종료하고 문자열의 행이 바뀌면 정규표현식의 대상이 되지 않는다. 플래그로 이 점을 무력화 할 수 있다.

  • i - 대소문자 구분 없이 검색한다.
  • g - 문자열 내의 모든 패턴을 검색한다.
  • m - 문자열의 행이 바뀌더라도 검색을 계속한다.
let targetStr = 'Something is happening to BINGBING';
let regExp1 = /ing/;
targetStr.match(regExp);  // ["ing"]
let regExp2 = /ing/ig;
targetStr.match(regExp);  // ["ing", "ing", "ING", "ING"]

좋은 웹페이지 즐겨찾기