프론트엔드/정규표현식

정규표현식

테오구 2021. 11. 11. 01:20
728x90

표현식에서 내부적으로 특정 의미를 가지는 문자를 말하며 간단하게 정리하면 아래의 표와 같다.

 표현식 의미 
 ^x  문자열의 시작을 표현하며 x 문자로 시작됨을 의미한다.
x$  문자열의 종료를 표현하며 x 문자로 종료됨을 의미한다.
 .x  임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미한다.
 x+  반복을 표현하며 x 문자가 한번 이상 반복됨을 의미한다.
 x?  존재여부를 표현하며 x 문자가 존재할 수도, 존재하지 않을 수도 있음을 의미한다.
 x*  반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미한다.
 x|y  or 를 표현하며 x 또는 y 문자가 존재함을 의미한다.
 (x) 그룹을 표현하며 x 를 그룹으로 처리함을 의미한다.
 (x)(y) 그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리된다.
 (x)(?:y) 그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다. 
 x{n}  반복을 표현하며 x 문자가 n번 반복됨을 의미한다.
 x{n,}  반복을 표현하며 x 문자가 n번 이상 반복됨을 의미한다.
 x{n,m}  반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미한다.



 표현식 의미 
[xy] 문자 선택을 표현하며 x 와 y 중에 하나를 의미한다.
 [^xy] not 을 표현하며  x 및 y 를 제외한 문자를 의미한다.
 [x-z] range를 표현하며 x ~ z 사이의 문자를 의미한다. 
 \^ escape 를 표현하며 ^ 를 문자로 사용함을 의미한다.
 \b word boundary를 표현하며 문자와 공백사이의 문자를 의미한다.
 \B non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다.
 \d digit 를 표현하며 숫자를 의미한다. 
 \D non digit 를 표현하며 숫자가 아닌 것을 의미한다. 
 \s space 를 표현하며 공백 문자를 의미한다. 
 \S non space를 표현하며 공백 문자가 아닌 것을 의미한다.
 \t tab 을 표현하며 탭 문자를 의미한다.
 \v vertical tab을 표현하며 수직 탭(?) 문자를 의미한다.
 \w word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. 
 \W non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. 


이메일 유효성 검사

더보기

let regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;

휴대전화 번호 유효성 검사

더보기

let regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;

RegExp 객체의 메소드

exec()

exec 는 execution 의 줄임말로, 원하는 정보를 뽑아내고자 할 때 사용합니다. 검색의 대상이 찾고자 하는 문자열에 대한 정보를 가지고 있다면 이를 배열로 반환하며, 찾는 문자열이 없다면 null을 반환합니다.

더보기

let pattern = /c/; // 찾고자 하는 문자열

pattern.exec('code') // 검색하려는 대상을 exec 메소드의 첫 번째 인자로 전달합니다.

 

// 즉, 'code' 가 'c' 를 포함하고 있는지를 확인합니다.

// 이 경우 'c' 가 포함되어 있으므로, ['c'] 를 반환합니다.

test()

찾고자 하는 문자열이 대상 안에 있는지의 여부를 boolean 으로 리턴합니다.

더보기

let pattern = /c/;

pattern.test('codestates');

// 이 경우는 'codestates'가 'c'를 포함하고 있으므로 true 를 리턴합니다.

String 객체의 메소드

match()

RegExp.exec() 와 비슷한 기능을 하며, 정규 표현식을 인자로 받아 주어진 문자열과 일치된 결과를 배열로 반환합니다. 일치되는 결과가 없으면 null 을 리턴합니다.

더보기

let pattern = /c/;

let str = 'codestates';

str.match(pattern);

// str 안에 pattern 이 포함되어 있으므로, ['c'] 를 반환합니다.

replace()

'검색 후 바꾸기'를 수행합니다.

첫 번째 인자로는 정규표현식을 받고,

두 번째 인자로는 치환하려는 문자열을 받습니다.

문자열에서 찾고자 하는 대상을 검색해서 이를 치환하려는 문자열로 변경 후 변경된 값을 리턴합니다.

더보기

let pattern = /c/;

let str = 'codestates';

str.replace(pattern, 'C');

// str 안에서 pattern 을 검색한 후 'C' 로 변경하여 그 결과를 리턴합니다.

// 여기서는 'Codestates'가 반환됩니다.

split()

주어진 인자를 구분자로 삼아, 문자열을 부분 문자열로 나누어 그 결과를 배열로 반환합니다.

더보기

"123,456,789".split(",") // ["123", "456", "789"]

"12304560789".split("0") // ["123", "456", "789"]

search()

정규표현식을 인자로 받아 가장 처음 매칭되는 부분 문자열의 위치를 반환합니다. 매칭되는 문자열이 없으면 -1을 반환합니다.

더보기

"JavaScript".search(/script/); // -1 대소문자를 구분합니다

"JavaScript".search(/Script/); // 4

"codestates".search(/ode/); // 1

flag

정규표현식은 플래그를 설정해 줄 수 있으며, 플래그는 추가적인 검색 옵션의 역할을 해 줍니다. 이 플래그들은 각자 혹은 함께 사용하는 것이 모두 가능하며, 순서에 구분이 없습니다. 아래는 자주 사용되는 3가지 플래그입니다.

i

i를 붙이면 대소문자를 구분하지 않습니다.

더보기

let withi = /c/i;

let withouti = /c/;

"Codestates".match(withi); // ['C']

"Codestates".match(withouti); // null

g

global 의 약자로, g 를 붙이면 검색된 모든 결과를 리턴합니다.

더보기

let withg = /c/g;

let withoutg = /c/;

"coolcodestates".match(withg); // ['c', 'c']

"coolcodestates".match(withoutg); // ['c'] g 가 없으면 첫 번째 검색 결과만 반환합니다

m

m을 붙이면 다중행을 검색합니다.

더보기

let str = `1st : cool

2nd : code

3rd : states`;

str.match(/c/gm)

// 3개의 행을 검색하여 모든 c 를 반환합니다.

// ['c', 'c']

str.match(/c/m)

// m은 다중행을 검색하게 해 주지만, g 를 빼고 검색하면 검색 대상을 찾는 순간 검색을 멈추기 때문에

// 첫 행의 ['c'] 만 리턴합니다.

 

728x90