형식

/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)