[javascript] 정규표현식(Regular Expression) 확실하게 알고가자 !

[javascript] 정규표현식(Regular Expression) 확실하게 알고가자 !

정규표현식이란?

정규 표현식은 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴이다.

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

정규식을 만드는 2가지 방법

1. 정규식 리터럴 사용

let re = /ab+c/;

2. RegExp 객체의 생성자 함수 사용

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

정규식 리터럴은 스크립트가 불러와질 때 컴파일되고, 생성자 함수는 실행 시점에 컴파일 된다는 차이점이 있다.

정규식 패턴

1. 단순 패턴 사용

문자열을 있는 그대로 대응시키고자 할 때 사용된다.

예를 들어, /abc/ 라는 패턴은 abc 라는 문자, 순서가 모두 대응되어야만 한다.

2. 특수 문자 사용

패턴에 특수 문자를 사용하여 여러 개의 a를 찾거나 숫자만 찾거나 할 수 있다.

정규식 사용법

/패턴/플래그

패턴 : 매칭시킬 패턴

플래그 : 옵션이라고 보면 된다. 한개만 찾을지 여러 개 찾을지

1. 정규식 매칭 패턴

패턴 의미 a-zA-Z 영어(대소문자) (-으로 범위 지정 가능) ㄱ-ㅎ가-힣 한글 (-으로 범위 지정 가능) 0-9 숫자 (-으로 범위 지정 가능) . 모든 문자열 (숫자, 한글, 영어, 특수기호, 공백 모두 포함 / 단, 줄바꿈X) \d 숫자 \D 숫자가 아닌 문자 \w 영어(대소문자), 숫자, 언더바(_) -> [A-Za-z0-9_] 와 동일 \W \w와 반대 -> [^A-Za-z0-9_] 와 동일 \s space 공백 \S space 공백이 아닌 것 \특수기호 특수기호

2. 정규식 검색 패턴

기호 의미 \ 뒤에 붙은 문자가 문자 그대로 해석되지 않는다.

뒤에 붙은 특수문자는 특수문자 그대로 해석된다.

예를 들어, "\*" 이면 *가 뜻하는 0개에서 여러 개 반복을 뜻하지 않고, "*"를 뜻한다. | OR [] 괄호안의 문자들 중 하나 [^문자] 괄호안의 문자를 제외한 것 ^문자열 입력의 시작 부분에 대응된다.

예를 들어, /^A/ 는 "An E" 의 'A'와는 대응되지만, "an A" 의 'A'와는 대응되지 않는다.

문자열$ 입 력의 끝 부분과 대응된다.

예를 들어, /t$/ 는 "eat" 과는 대응되지만, "eater" 의 't'에는 대응되지 않는다. x|y 'x' 또는 'y'에 대응된다. (x) x에 대응되고 기억한다.

그룹 검색 및 분류 (match메서드에서 그룹별로 묶어줌)

예를 들어, 패턴 /(foo) (bar) \1 \2/ 안의 ' (foo) ' 와 ' (bar) '는 문자열"foo bar foo bar"에서 처음 두 단어에 대응되고 이를 기억한다. (?: x) x에 대응되지만 기억하지 않는다.

그룹 검색 (분류X) \b 단어 경계에 대응된다.

예를 들어, /\bm/ 는 "moon"의 'm'에 대응되고,

/oo\b/ 는 "moon"의 'oo' 부분에 대응된다. \B 단어 경계가 아닌 부분에 대응된다.

3. 정규식 갯수

기호 의미 ? 0 또는 1회 * 0회 이상 + 1회 이상 . 단일 문자와 대응

예를 들어, /.n/ 는 "nay, on the tree"에서 'on'에 대응되지만, 'nay' 에는 대응되지 않는다. {n} n개 {Min,} 최소 Min개 이상 {Min, Max} 최소 Min개 이상, 최대 Max개 이하

4. 정규식 플래그

: 플래그는 동시에 여러개 사용할 수 있다. 예) gi, gm 등

플래그 의미 g Global: 모든 문자 검색 (이걸 안 쓰면 매칭되는 첫 문자만 검색한다.) i Ignore Case: 대소문자 구분 안함 m Multi line: 여러 행의 문자열에 대해 검색

* 이외에 singleline, unicode, sticky 옵션도 있는데, 잘 쓰진 않는다.

5. 정규식 메소드 사용

메소드 의미 문자열.match(/정규식/플래그) "문자열"에서 "정규식"에 매칭되는 항목들을 배열로 반환 문자열.replace(/정규식/, "대체문자열") "정규식"에 매칭되는 항목을 "대체문자열"로 변환 문자열.split(정규식) "문자열"을 "정규식"에 매칭되는 항목으로 쪼개어 배열로 반환 정규식.test("문자열") "문자열"이 "정규식"과 매칭되면 true, 아니면 false반환 정규식.exec("문자열") match메소드와 유사 (단, 무조건 첫번째 매칭 결과만 반환)

공부하자 공부하자 했던 정규식을 제대로 처음 공부 ..ㅎ

근데 분명 작성하면서 공부했는데 외울게 너무 많아서 머리에 남은게 없다

자주 들여다 보자 !

from http://juyami.tistory.com/29 by ccl(A) rewrite - 2021-11-27 00:27:44