관리 메뉴

πŸ–₯ dev-ruby

[μžλ°”μŠ€ν¬λ¦½νŠΈ] μ •κ·œν‘œν˜„μ‹(Regular Expression) ν™•μ‹€ν•˜κ²Œ μ•Œκ³ κ°€μž ! λ³Έλ¬Έ

javascript

[μžλ°”μŠ€ν¬λ¦½νŠΈ] μ •κ·œν‘œν˜„μ‹(Regular Expression) ν™•μ‹€ν•˜κ²Œ μ•Œκ³ κ°€μž !

ruby_s 2021. 11. 27. 00:25
728x90
λ°˜μ‘ν˜•
SMALL

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

μ •κ·œ ν‘œν˜„μ‹μ€ λ¬Έμžμ—΄μ— λ‚˜νƒ€λŠ” νŠΉμ • 문자 μ‘°ν•©κ³Ό λŒ€μ‘μ‹œν‚€κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μ΄λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ •κ·œν‘œν˜„μ‹λ„ 객체닀.

μ •κ·œμ‹μ„ λ§Œλ“œλŠ” 2가지 방법

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

let re = /ab+c/;

2. RegExp 객체의 μƒμ„±μž ν•¨μˆ˜ μ‚¬μš©

let re = new RegExp("ab+c");

μ •κ·œμ‹ λ¦¬ν„°λŸ΄μ€ μŠ€ν¬λ¦½νŠΈκ°€ λΆˆλŸ¬μ™€μ§ˆ λ•Œ 컴파일되고, μƒμ„±μž ν•¨μˆ˜λŠ” μ‹€ν–‰ μ‹œμ μ— 컴파일 λœλ‹€λŠ” 차이점이 μžˆλ‹€.

 

μ •κ·œμ‹ νŒ¨ν„΄

1. λ‹¨μˆœ νŒ¨ν„΄ μ‚¬μš©

  • λ¬Έμžμ—΄μ„ μžˆλŠ” κ·ΈλŒ€λ‘œ λŒ€μ‘μ‹œν‚€κ³ μž ν•  λ•Œ μ‚¬μš©λœλ‹€.
  • 예λ₯Ό λ“€μ–΄, /abc/ λΌλŠ” νŒ¨ν„΄μ€ abc λΌλŠ” 문자, μˆœμ„œκ°€ λͺ¨λ‘ λŒ€μ‘λ˜μ–΄μ•Όλ§Œ ν•œλ‹€.

2. 특수 문자 μ‚¬μš©

  • νŒ¨ν„΄μ— 특수 문자λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ 개의 aλ₯Ό μ°Ύκ±°λ‚˜ 숫자만 μ°Ύκ±°λ‚˜ ν•  수 μžˆλ‹€.

 

μ •κ·œμ‹ μ‚¬μš©λ²•

/νŒ¨ν„΄/ν”Œλž˜κ·Έ

νŒ¨ν„΄ : λ§€μΉ­μ‹œν‚¬ νŒ¨ν„΄

ν”Œλž˜κ·Έ : μ˜΅μ…˜μ΄λΌκ³  보면 λœλ‹€. ν•œκ°œλ§Œ 찾을지 μ—¬λŸ¬ 개 찾을지

1. μ •κ·œμ‹ 맀칭 νŒ¨ν„΄

νŒ¨ν„΄ 의미
a-zA-Z μ˜μ–΄(λŒ€μ†Œλ¬Έμž) (-으둜 λ²”μœ„ 지정 κ°€λŠ₯)
γ„±-γ…Žκ°€-힣 ν•œκΈ€ (-으둜 λ²”μœ„ 지정 κ°€λŠ₯)
0-9 숫자 (-으둜 λ²”μœ„ 지정 κ°€λŠ₯)
. 단일 λ¬Έμžμ™€ λŒ€μ‘
예λ₯Ό λ“€μ–΄,
/.n/λŠ” "nay, on the tree"μ—μ„œ 'on'에 λŒ€μ‘λ˜μ§€λ§Œ, 'nay' μ—λŠ” λŒ€μ‘λ˜μ§€ μ•ŠλŠ”λ‹€.
\d 숫자
\D μˆ«μžκ°€ μ•„λ‹Œ 문자
\w μ˜μ–΄(λŒ€μ†Œλ¬Έμž), 숫자, 언더바(_) -> [A-Za-z0-9_] μ™€ 동일
\W \w와 λ°˜λŒ€ -> [^A-Za-z0-9_] μ™€ 동일
\s space 곡백
\S space 곡백이 μ•„λ‹Œ 것
\특수기호 특수기호

 

2. μ •κ·œμ‹ 검색 νŒ¨ν„΄

기호 의미
\ 뒀에 뢙은 λ¬Έμžκ°€ 문자 κ·ΈλŒ€λ‘œ ν•΄μ„λ˜μ§€ μ•ŠλŠ”λ‹€.
뒀에 뢙은 νŠΉμˆ˜λ¬ΈμžλŠ” 특수문자 κ·ΈλŒ€λ‘œ ν•΄μ„λœλ‹€.
예λ₯Ό λ“€μ–΄, "\*" 이면 *κ°€ λœ»ν•˜λŠ” 0κ°œμ—μ„œ μ—¬λŸ¬ 개 λ°˜λ³΅μ„ λœ»ν•˜μ§€ μ•Šκ³ , "*"λ₯Ό λœ»ν•œλ‹€.
| OR
[] κ΄„ν˜Έμ•ˆμ˜ λ¬Έμžλ“€ 쀑 ν•˜λ‚˜
[^문자] κ΄„ν˜Έμ•ˆμ˜ 문자λ₯Ό μ œμ™Έν•œ 것
^λ¬Έμžμ—΄ μž…λ ₯의 μ‹œμž‘ 뢀뢄에 λŒ€μ‘λœλ‹€.
예λ₯Ό λ“€μ–΄, /^A/ λŠ” "An E" 의 'A'μ™€λŠ” λŒ€μ‘λ˜μ§€λ§Œ, "an A" 의 'A'μ™€λŠ” λŒ€μ‘λ˜μ§€ μ•ŠλŠ”λ‹€.
λ¬Έμžμ—΄$ μž…λ ₯의 끝 λΆ€λΆ„κ³Ό λŒ€μ‘λœλ‹€.
예λ₯Ό λ“€μ–΄, /t$/ λŠ” "eat" κ³ΌλŠ” λŒ€μ‘λ˜μ§€λ§Œ, "eater" 의 't'μ—λŠ” λŒ€μ‘λ˜μ§€ μ•ŠλŠ”λ‹€.
x|y 'x' λ˜λŠ” 'y'에 λŒ€μ‘λœλ‹€.
(x) x에 λŒ€μ‘λ˜κ³  κΈ°μ–΅ν•œλ‹€.
κ·Έλ£Ή 검색 및 λΆ„λ₯˜ (matchλ©”μ„œλ“œμ—μ„œ κ·Έλ£Ήλ³„λ‘œ λ¬Άμ–΄μ€Œ)
예λ₯Ό λ“€μ–΄, νŒ¨ν„΄ /(foo) (bar) \1 \2/ μ•ˆμ˜ '(foo)' 와 '(bar)'λŠ” λ¬Έμžμ—΄"foo bar foo bar"μ—μ„œ 처음 두 단어에 λŒ€μ‘λ˜κ³  이λ₯Ό κΈ°μ–΅ν•œλ‹€.
(?: x) x에 λŒ€μ‘λ˜μ§€λ§Œ κΈ°μ–΅ν•˜μ§€ μ•ŠλŠ”λ‹€.
κ·Έλ£Ή 검색 (λΆ„λ₯˜X)
\b 단어 경계에 λŒ€μ‘λœλ‹€.
예λ₯Ό λ“€μ–΄, /\bm/λŠ” "moon"의 'm'에 λŒ€μ‘λ˜κ³ ,

/oo\b/ λŠ” "moon"의 'oo' 뢀뢄에 λŒ€μ‘λœλ‹€.
\B 단어 경계가 μ•„λ‹Œ 뢀뢄에 λŒ€μ‘λœλ‹€.

 

3. μ •κ·œμ‹ 갯수

기호 의미
?  0 λ˜λŠ” 1회
* 0회 이상
+ 1회 이상
{n} n개
{Min,} μ΅œμ†Œ Min개 이상
{Min, Max} μ΅œμ†Œ Min개 이상, μ΅œλŒ€ Max개 μ΄ν•˜

 

4. μ •κ·œμ‹ ν”Œλž˜κ·Έ

: ν”Œλž˜κ·ΈλŠ” λ™μ‹œμ— μ—¬λŸ¬κ°œ μ‚¬μš©ν•  수 μžˆλ‹€. 예) gi, gm λ“±

ν”Œλž˜κ·Έ 의미
g Global: λͺ¨λ“  문자 검색 (이걸 μ•ˆ μ“°λ©΄ λ§€μΉ­λ˜λŠ” 첫 문자만 κ²€μƒ‰ν•œλ‹€.)
i Ignore Case: λŒ€μ†Œλ¬Έμž ꡬ뢄 μ•ˆν•¨
m Multi line: μ—¬λŸ¬ ν–‰μ˜ λ¬Έμžμ—΄μ— λŒ€ν•΄ 검색

* 이외에 singleline, unicode, sticky μ˜΅μ…˜λ„ μžˆλŠ”λ°, 잘 쓰진 μ•ŠλŠ”λ‹€κ³  ν•œλ‹€.

 

5. μ •κ·œμ‹ λ©”μ†Œλ“œ μ‚¬μš©

λ©”μ†Œλ“œ 의미
λ¬Έμžμ—΄.match(/μ •κ·œμ‹/ν”Œλž˜κ·Έ) "λ¬Έμžμ—΄"μ—μ„œ "μ •κ·œμ‹"에 λ§€μΉ­λ˜λŠ” ν•­λͺ©λ“€μ„ λ°°μ—΄λ‘œ λ°˜ν™˜
λ¬Έμžμ—΄.replace(/μ •κ·œμ‹/, "λŒ€μ²΄λ¬Έμžμ—΄") "μ •κ·œμ‹"에 λ§€μΉ­λ˜λŠ” ν•­λͺ©μ„ "λŒ€μ²΄λ¬Έμžμ—΄"둜 λ³€ν™˜
μ •κ·œμ‹.test("λ¬Έμžμ—΄") "λ¬Έμžμ—΄"이 "μ •κ·œμ‹"κ³Ό 맀칭되면 true, μ•„λ‹ˆλ©΄ falseλ°˜ν™˜
λ¬Έμžμ—΄.split(μ •κ·œμ‹) "λ¬Έμžμ—΄"을 "μ •κ·œμ‹"에 λ§€μΉ­λ˜λŠ” ν•­λͺ©μœΌλ‘œ μͺΌκ°œμ–΄ λ°°μ—΄λ‘œ λ°˜ν™˜
μ •κ·œμ‹.exec("λ¬Έμžμ—΄") match와 μœ μ‚¬ (단, 무쑰건 첫번째 맀칭 결과만 λ°˜ν™˜)

 

κ³΅λΆ€ν•˜μž κ³΅λΆ€ν•˜μž ν–ˆλ˜ μ •κ·œμ‹μ„ μ œλŒ€λ‘œ 처음 곡뢀 ..γ…Ž
근데 λΆ„λͺ… μž‘μ„±ν•˜λ©΄μ„œ κ³΅λΆ€ν–ˆλŠ”λ° μ™ΈμšΈκ²Œ λ„ˆλ¬΄ λ§Žμ•„μ„œ 머리에 λ‚¨μ€κ²Œ μ—†λ‹€
자주 λ“€μ—¬λ‹€ 보자 !
728x90
λ°˜μ‘ν˜•
LIST