정규표현식 (Regular Expression: Regex)
형식
/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*.[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://heropy.blog/2018/10/28/regexp/)
https://curryyou.tistory.com/234
[[자바스크립트] 정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코
정규표현식이란?(Regular Expression: Regex) 정규표현식은 “특정 패턴의 문자열”을 찾기 위한 표현 방식입니다. (이런걸 형식 언어, formal languange라고 합니다.) 정규표현식을 이용하면, 특정 패턴에 매
curryyou.tistory.com](https://curryyou.tistory.com/234)