λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 31μž₯ RegExp

728x90

πŸ„ 31.1 μ •κ·œμ‹ ν‘œν˜„μ‹μ΄λž€?

 

μ •κ·œμ‹ ν‘œν˜„μ‹ regular expression

: μΌμ •ν•œ νŒ¨ν„΄μ„ 가진 λ¬Έμžμ—΄μ˜ 집합을 ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” ν˜•μ‹ μ–Έμ–΄

 

- JS 의 고유 문법이 μ•„λ‹ˆλ©°, λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° 언어에 λ‚΄μž₯돼있음.

- λ¬Έμžμ—΄μ„ λŒ€μƒμœΌλ‘œ νŒ¨ν„΄ 맀칭 κΈ°λŠ₯을 제곡. ( = νŠΉμ • νŒ¨ν„΄κ³Ό μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ„ 검색, μΆ”μΆœ, μΉ˜ν™˜ν•  수 μžˆλ‹€.)

- μ •κ·œμ‹μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 반볡문과 쑰건문을 톡해 νž˜λ“€κ²Œ 체크해야함.

 

 

 

 

 

πŸ„ 31.2 μ •κ·œμ‹ ν‘œν˜„μ‹μ˜ 생성

 

μ •κ·œ ν‘œν˜„μ‹ 객체λ₯Ό μƒμ„±ν•˜λŠ” 방법

1. μ •κ·œμ‹ λ¦¬ν„°λŸ΄

- νŒ¨ν„΄κ³Ό ν”Œλž˜κ·Έλ‘œ ꡬ성됨.

μ •κ·œ ν‘œν˜„μ‹ λ¦¬ν„°λŸ΄

const reg = /is/i;

 

2. RegExp μƒμ„±μž ν•¨μˆ˜

const reg = new RegExp(/is/i);

 

 

 

 

 

πŸ„ 31.3 RegExp λ©”μ„œλ“œ

 

31.3.1 RegExp.prototype.exec

λ¬Έμžμ—΄ 인수둜 전달 λ°›μŒ

맀칭 κ²°κ³Όλ₯Ό πŸ‘‡return

["is", index: 5, input: "Is this all there is?", groups: undefined]

μ—†λ‹€λ©΄ null return 

- g ν”Œλž˜κ·Έλ₯Ό μ μš©ν•΄λ„ 첫번째 맀칭 결과만 λ°˜ν™˜

 

31.3.2 RegExp.prototype.text

인수둜 전달 받은 λ¬Έμžμ—΄ -> 맀칭 κ²°κ³Όλ₯Ό boolean 으둜 return

 

31.3.2 RegExp.prototype.match

인수둜 전달 받은 λ¬Έμžμ—΄ -> λ°°μ—΄λ‘œ λ°˜ν™˜

- g ν”Œλž˜κ·Έλ₯Ό 적용되면 λͺ¨λ“  맀칭 κ²°κ³Ό λ°˜ν™˜

 

 

 

 

πŸ„ 31.4 ν”Œλž˜κ·Έ

 

μ •κ·œ ν‘œν˜„μ‹μ˜ 검색 방식.

6개 쀑 3가지

 

- μ˜΅μ…˜μ΄λ―€λ‘œ 선택적 μ‚¬μš© κ°€λŠ₯. 

- μˆœμ„œμ™€ 상관없닀.

 

πŸ“Œ ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄

- λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•΄μ„œ νŒ¨ν„΄μ„ 검색

- 맀칭이 μ—¬λŸ¬κ°œμ—¬μ„œ 첫번째 맀칭 λŒ€μƒλ§Œ κ²€μƒ‰ν•˜κ³  μ’…λ£Œν•¨.

 

const target = 'Is this all there is?'

console.log(target.match(/is/g));
// [ 'is', 'is' ]

console.log(target.match(/is/ig));
//[ 'Is', 'is', 'is' ]

 

 

 

πŸ„ 31.5 νŒ¨ν„΄

 

νŒ¨ν„΄μ€ / 둜 μ—΄κ³  λ‹«μœΌλ©° λ¬Έμžμ—΄μ˜ λ”°μ˜΄ν‘œλŠ” μƒλž΅ν•œλ‹€.

λ”°μ˜΄ν‘œ ν¬ν•¨μ‹œ -> λ”°λ‘¬ν‘œλ„ νŒ¨ν„΄μœΌλ‘œ 인식. 

μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ΄ μ‘΄μž¬ν•˜λ©΄ "μ •κ·œ ν‘œν˜„μ‹κ³Ό λ§€μΉ˜ν•œλ‹€" 라고 ν‘œν˜„. 

 

31.5.1 λ¬Έμžμ—΄ 검색

 

μ •κ·œμ‹μ„ μƒμ„±ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ κ²€μƒ‰λ˜μ§€ μ•ŠμŒ. 

λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Όν•¨. 

 

i : λŒ€μ†Œλ¬Έμž κ΅¬λ³„ν•˜μ§€ μ•ŠλŠ” ν”Œλž˜κ·Έ

g : λͺ¨λ“  λ¬Έμžμ—΄μ„ μ „μ—­ κ²€μƒ‰ν•˜λŠ” ν”Œλž˜κ·Έ

 

 

31.5.2 μž„μ˜μ˜ λ¬Έμžμ—΄ 검색

 

. 은 문자 ν•œκ°œλ₯Ό 의미. 

문자의 λ‚΄μš©μ€ 상관없닀.

κ³΅λ°±κΉŒμ§€ ν¬ν•¨λ˜μ–΄ κ²€μƒ‰λ˜λŠ”κ±Έ λ³Ό 수 μžˆλ‹€.

 

 

 

31.5.3 반볡 검색

 

{m,n}

μ΅œμ†Œ m 번, μ΅œλŒ€ n 번 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 의미. 

(m,n 사이에 곡백 λ„£μœΌλ©΄ μž‘λ™ μ•ˆν•¨)

 

{n} 은 {n,n} κ³Ό κ°™λ‹€.

AA, A κ°€ λ”°λ‘œ λ‚˜μ˜΄.

const target = 'A AA B BB Aa Bb AAA'

console.log(target.match(/A{1,2}/g));

//[ 'A', 'AA', 'A', 'AA', 'A' ]

 

{n,} : μ•ž νŒ¨ν„΄μ΄ μ΅œμ†Œ n 번 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 의미. 

 

+ : μ•žμ„  νŒ¨ν„΄μ΄ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” 문자. {1,} κ³Ό κ°™λ‹€.

AAA κ°€ λ‚˜μ˜΄. 

- λΆ„ν•΄λ˜μ§€ μ•Šμ€ 단어 레벨둜 κ²€μƒ‰ν•˜κΈ° μœ„ν•¨. 

const target = 'A AA B BB Aa Bb AAA'

console.log(target.match(/A+/g));
//[ 'A', 'AA', 'A', 'AAA' ]

 

? : μ΅œλŒ€ ν•œλ²ˆ (0번 포함) 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 의미. {0,1} κ³Ό κ°™λ‹€.

 

 

 

31.5.4 OR 검색

 

| 은 or 의 의미λ₯Ό κ°–λŠ”λ‹€.

/A|B/ λŠ” 'A' λ˜λŠ” 'B' λ₯Ό 의미. 

 

- λΆ„ν•΄λ˜μ§€ μ•Šμ€ 단어 레벨둜 κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ + λ₯Ό ν•¨κ»˜ μ‚¬μš©

 

 

 

[] μ•ˆμ— λ„£μœΌλ©΄ or 이 μžλ™ 적용됨. 

 

같은걸 μ•Œ 수 μžˆλ‹€.

 

λ²”μœ„λ₯Ό μ§€μ •ν•˜λ €λ©΄ [] μ•ˆμ— - μ‚¬μš©

 

 

 

λŒ€μ†Œλ¬Έμž ꡬ뢄 없이 μ•ŒνŒŒλ²³ κ²€μƒ‰ν•˜λŠ” 방법

/[A-Za-z]+/g

 

숫자λ₯Ό κ²€μƒ‰ν•˜λŠ” 방법

/[0-9]+/g

 

, κ°€ ν¬ν•¨λœ 숫자 12,345

/[0-9,]+/g

 

κ°„λ‹¨νžˆ μ‚¬μš©ν•  수 μžˆλŠ” 기호

\d === [0-9] 숫자
\D  \d λ₯Ό μ œμ™Έ => λ­„μžλ₯Ό 의미
\w === [A-Za-z0-9_] μ•ŒνŒŒλ²³, 숫자, μ–Έλ”μŠ€μ½”μ–΄ _ λ₯Ό 의미
\W \w 와 λ°˜λŒ€λ‘œ λ™μž‘. μœ„λ₯Ό μ œμ™Έν•œ 문자λ₯Ό 의미

 

 

 

31.5.5 NOT 검색

[...] λ‚΄μ˜ ^ : not 의 의미λ₯Ό κ°–λŠ”λ‹€.

 

숫자λ₯Ό μ œμ™Έν•œ 문자

[^0-9]

 

 

31.5.6 μ‹œμž‘ μœ„μΉ˜λ‘œ 검색

[...] λ°–μ˜ ^ λ¬Έμžμ—΄μ€ μ‹œμž‘μ„ 의미

/^ap/

=> 'apple'

 

31.5.7 λ§ˆμ§€λ§‰ μœ„μΉ˜λ‘œ 검색

$ 은 λ¬Έμžμ—΄μ˜ λ§ˆμ§€λ§‰μ„ 의미.

/com$/

=> 'www.naver.com'

 

 

 

 

 

 

πŸ„ 31.6 자주 μ‚¬μš©ν•˜λŠ” μ •κ·œν‘œν˜„μ‹

 

31.6.1 νŠΉμ • λ‹¨μ–΄λ‘œ μ‹œμž‘ν•˜λŠ”μ§€ 검사

같은 μ½”λ“œμž„.

/^νŠΉμ •λ‹¨μ–΄/

 

 

 

31.6.2 νŠΉμ • λ‹¨μ–΄λ‘œ λλ‚˜λŠ”μ§€ 검사

 

 

/νŠΉμ •λ‹¨μ–΄$/

 

 

31.6.3 숫자둜만 이루어진 λ¬Έμžμ—΄μΈμ§€ 검사

 

/^\d+$/

처음과 끝이 숫자이고, μ΅œμ†Œ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄κ³Ό 맀치.

'12345'

 

 

31.6.4 ν•˜λ‚˜ μ΄μƒμ˜ 곡백으둜 μ‹œμž‘ν•˜λŠ”μ§€ 검사

 

/^[\s]+/

 

\s λŠ” μ—¬λŸ¬κ°€μ§€ 곡백 문자 (슀페이슀, νƒ­) 을 의미. 

 

 

31.6.5 μ•„μ΄λ””λ‘œ μ‚¬μš© κ°€λŠ₯ν•œμ§€ 검사

/^[A-Za-z0-9]{4,10}$/

μ•ŒνŒŒλ²³ λŒ€μ†Œλ¬Έμž λ˜λŠ” 숫자둜 μ‹œμž‘ν•˜κ³  λλ‚˜λ©°

4-10 μžλ¦¬μΈμ§€ 검사.

 

 

31.6.6 메일 μ£Όμ†Œ ν˜•μ‹μ— λ§žλŠ”μ§€ 검사

/^[A-Za-z0-9]([-_\.]?[0-9a-zA-Z])*@[A-Za-z0-9]([-_\.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/

 

*λŠ” λ°˜λ³΅μ„ 의미. λ°”λ‘œ μ•žμ— μžˆλŠ” λ¬Έμžκ°€ λ¬΄ν•œλŒ€λ‘œ 반볡 κ°€λŠ₯

 

31.6.7 ν•Έλ“œν° 번호 ν˜•μ‹μ΄ λ§žλŠ”μ§€ 검사

 

 

31.6.6 특수 문자 포함 μ—¬λΆ€ 검사

 

 

μœ„μ•„λž˜ μ •κ·œμ‹μ΄ κ°™λ‹€.

 

 

 

 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•