형식
/pattern/flag
//예시 문자열
let str = "안녕하세요 안녕 제 전화번호는 010-1234-5678입니다 G gd god good goood!.";
패턴 | 의미 | 비고 |
[a-z] [A-Z] | 알파벳 범위 | |
[ㄱ-ㅎ] [가-힣] | 한글 범위 | |
0-9 | 숫자 범위 | |
. | 모든 문자열 (공백 포함, 줄바꿈은 x) | 1개당 문자열한개. ...은 3자리의 문자열 |
\d | 숫자 | str.match(/\d/) === '0' |
\D | 숫자 아닌거 | |
\w | 알파벳, 숫자, _ | 영문 대소문자 52개 + 숫자 10개 + _ 1개 =63개 문자 |
\W | \w 제외 | |
\s | 공백 | |
\S | 공백 아닌것 | |
^ | 줄의 시작에서 일치 | e.g. /^abc/ 시작 포함돼야함 |
[^] | 부정(not) | |
$ | 줄의 끝에서 일치 | e.g. /abc$/ 끝 포함돼야함 /goood!\.$/ 마지막 찾으려면 이렇게 써야함 .도 의미를 가지고 있기에 앞에 \를 붙여서 뒤의문자가 단순 문자라고 선언해줘야함 |
| | 또는 | str.match(/안|/녕/) === '안' |
[] | 괄호안 문자들 중 하나 | /[안녕하]/ === /안|녕|하/ |
[^문자] | 해당 문자 제외 | 'abcde'.replace(/[^ace]/g,' ') === 'a c e' |
\b | 단어의 처음/끝, 한글안됨 /\b0/ : 단어 시작, /0\b/ : 단어 끝 |
str.match(/\b0/) === 0 (index : 17) 한글은 인식못하는데 못찾음 |
\B | 단어의 처음/끝이 아님 | /0\b/처럼 문자를 앞에다가는 못쓰는거 같고 한글은 그냥 \B자체를 인식못해서 해당 글자를 찾아버림 |
* ==={0,} | 0회 이상 연속으로 반복되는 문자와 가능한 많이 일치 | str.match(/go*/g) === ['g', 'go', 'goo', 'gooo'] str.match(/.*/) === ['안녕하세요 안녕 제 전화번호는 010-1234-5678입니다 good!.'] |
*? === {0} | 0회 이상 연속으로 반복되는 문자와 가능한 적게 일치 | str.match(/go*?/g) === ['g', 'g', 'g', 'g'] str.match(/.*?/) === [''] |
+ === {1,} | 1회 이상 연속으로 반복되는 문자와 가능한 많이 일치 | str.match(/go+/g) === ['go', 'goo', 'gooo'] str.match(/.+/) === ['안녕하세요 안녕 제 전화번호는 010-1234-5678입니다 good!.'] |
+? === {1} | 1회 이상 연속으로 반복되는 문자와 가능한 적게 일치 | str.match(/go+?/g) === ['go', 'go', 'go'] str.match(/.+?/) === ['안'] |
? | 없거나 1회 가능한 많이 일치 | str.match(/go?/g) === ['g', 'go', 'go', 'go'] str.match(/.?/) === ['안'] |
?? | 없거나 1회 가능한 적게 일치 | str.match(/go??/g) === ['g', 'g', 'g', 'g'] str.match(/.??/) === [''] |
\u | 유니코드 문자에 일치 | /\u0061/.test('a') //true |
플래그 | 의미 | 비고 |
i | Ignoer Case | 대소문자 구분 안하고 검색 |
g | Global | 문자열 내의 모든 패턴 검색 |
m | Multi Line | 문자열의 행이 바뀌더라도 검색 |
u | unicode | /😀{2,}/u.test("😀😀") // true u안붙이면 flase 그런데 {2,}말고 정확히 일치나 {1,}, {1}같은거는 true뜨는데... 확실하게 하기위해 u붙여주자 |
메소드 | 의미 | 비고 |
정규식.exec(문자열) | 일치하는 하나의 정보(Array) 반환 | /안/.exec(str) === ['안'] // g를 붙여도 결과값은 하나나옴 |
정규식.test(문자열) | Boolean 반환 | |
문자열.match(정규식) | 일치하는 문자열의 배열 반환 | str.match(/안/) === /안/.exec(str) |
문자열.search(정규식) | 일치하는 문자열의 인덱스 반환 | str.search(/안/) === 0 // g를 붙여도 결과값은 하나 나옴 |
문자열.replace(정규식, 대체문자) | 일치하는 문자열을 대체문자열로 변환 | str.replace(/안/g,10) === '10녕하세요 10녕 제 전화번호는 010-1234-5678입니다 good!.' // g 정상 작동 |
문자열.split(정규식) | 일치하는 문자열을 분할하여 배열로 반한 | str.split(/안/) === str.split('안') === [ '', '녕하세요 ', '녕 제 전화번호는 010-1234-5678입니다 good!.' ] g안붙여도 전역 |
고급 | ||
문자열.replace(regexp | substr, newSubstr | funtion) |
공식문서 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_function_as_a_parameter | 두번째 인자로 함수를 쓴다면 함수의 매개변수는 match, p1,p2..., offset, string 이다 match는 검색이 된 부분, p1, p2는 캡쳐된 각 요소들, offset은 match의 첫 인덱스, string은 조사된 전체 문자열 '부산광역시'.replace(/(부).*?(광)/,(match, ...groups) =>{ console.log(match) // "부산광" console.log(groups) // ['부', '광', 0, '부산광역시'] |
자주 쓰는 정규표현식 | |
구문 | 의미 |
/^word/ | 특정 단어로 시작하는지 |
/word$/ | 특정 단어로 끝나는지 |
/^d+$/ | 모두 숫자인지 |
/^[\s]+/ | 하나 이상의 공백으로 시작하는지 (공백 문자 : \t, \r, \n, \v, \f) |
/^[A-Za-z0-9]{4,10}$/ | 아이디 사용 가능한지 (알파벳 대,소문자or숫자로 시작하고 끝나며 4~10자리인지) |
/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/ | 메일 주소 형식 검사 |
/^\d{3}-\d{3,4}-\d{4}$/ | 핸드폰 번호 형식 |
/[^A-Za-z0-9]/gi | 특수 문자 포함 됐는지 |
/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/gi | 특수 문자 포함 됐는지 (선별적 검색 가능) |
사용 예시 | 결과 |
str.match(/[0-9]/g) | ['0', '1', '0', '1', '2', '3', '4', '5', '6', '7', '8'] |
str.match(/[0-9]+/g) | ['010', '1234', '5678'] |
str.match(/[0-9-]+/g) | ['010-1234-5678'] |
str.match(/0+|1+|2+|3+|4+|5+|6+|7+|8+|9+/g)
|
['0', '1', '0', '1', '2', '3', '4', '5', '6', '7', '8'] |
참고
https://heropy.blog/2018/10/28/regexp/
정규표현식, 이렇게 시작하자!
매일 쓰는 것도, 가독성이 좋은 것도 아니지만, 모르면 안되는 정규표현식. 저는 이렇게 공부하기 시작했습니다! (자바스크립트를 기준으로 설명합니다)
heropy.blog
https://curryyou.tistory.com/234
[자바스크립트] 정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코
# 정규표현식이란?(Regular Expression: Regex) 정규표현식은 "특정 패턴의 문자열"을 찾기 위한 표현 방식입니다. (이런걸 형식 언어, formal languange라고 합니다.) 정규표현식을 이용하면, 특정 패턴에 매
curryyou.tistory.com
'코딩 공부 > 공부' 카테고리의 다른 글
Sequelize N : M (다대다)관계에 대한 고찰 (0) | 2022.05.05 |
---|---|
Sequelize 관계 설정 1 : N, N : M(1대다, 다대다) (1) | 2022.05.04 |
Sequelize와 Migration 기본 설정 (0) | 2022.05.04 |
JS로 slack bot 사용하기 (invalid_auth 에러 해결 법) (2) | 2022.04.27 |
포스트맨 자동화 (0) | 2022.04.26 |