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

πŸ“° μ–Έμ–΄/JS

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

μ±… <λŸ¬λ‹μžλ°”μŠ€ν¬λ¦½νŠΈ>λ₯Ό 기본으둜 배운 μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μš©μž…λ‹ˆλ‹€.

 

λͺ©μ°¨

  • <μ •κ·œ ν‘œν˜„μ‹> 1. μ •κ·œ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λŠ” 이유?
  • 2. μ •κ·œ ν‘œν˜„μ‹ λ§Œλ“€κΈ°
  • 3. μ •κ·œμ‹ νŒ¨ν„΄
  • 3-1) νŒ¨ν„΄ μž‘μ„±ν•˜κΈ°
  • μ •κ·œμ‹ ν‘œν˜„μ‹(더보기 클릭! : 특수 문자 μ‚¬μš© μ˜ˆμ‹œ)
  • 자주 μ‚¬μš©λ˜λŠ” 특수 문자(더보기 클릭! : 기타 특수 문자)
  • 4. κ·Έλ£Ή
  • 4-1) κ·Έλ£Ήν™”  
  • 4-2) μΊ‘처(capturing)

 

μ •κ·œν‘œν˜„μ‹ ν…ŒμŠ€νŠΈ μ‚¬μ΄νŠΈ

λ‚΄μš©μ„ μ΄ν•΄ν•˜λ©΄μ„œ μ‹€μ œλ‘œ μ μš©ν•΄ λ³΄λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ‚¬μ΄νŠΈλ“€μ„ μ΄μš©ν•˜μ—¬ μ •κ·œμ‹μ„ ν…ŒμŠ€νŠΈν•΄ λ΄…μ‹œλ‹€.

단, 각 μ‚¬μ΄νŠΈμ˜ μ„€μ •λœ ν™˜κ²½μ΄ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 일뢀 μž‘λ™ν•˜μ§€ μ•Šκ±°λ‚˜ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ‹€λ£¨λŠ” μ •κ·œμ‹κ³Ό λ‹€λ₯΄κ²Œ μž‘λ™ν•  수 μžˆμœΌλ―€λ‘œ μ‚¬μ΄νŠΈμ—μ„œ ν…ŒμŠ€νŠΈν•œ μ •κ·œμ‹μ˜ κ²°κ³Όλ₯Ό λ§Ήμ‹ ν•˜μ§€ 말고 μžμ‹ μ˜ ν™˜κ²½μ— λ§žλŠ”μ§€ κΌ­ ν…ŒμŠ€νŠΈν•˜μ„Έμš”.

 

<μ •κ·œ ν‘œν˜„μ‹>

1. μ •κ·œ ν‘œν˜„μ‹

μ •κ·œν‘œν˜„μ‹μ΄λž€ λ¬Έμžμ—΄μ„ κ²€μƒ‰ν•˜κ³  λŒ€μ²΄ν•˜λŠ” 데 μ‚¬μš© κ°€λŠ₯ν•œ μΌμ’…μ˜ ν˜•μ‹ μ–Έμ–΄(νŒ¨ν„΄)이닀.

κ°„λ‹¨ν•œ 문자 검색뢀터 이메일, νŒ¨μŠ€μ›Œλ“œ 검사 λ“±μ˜ λ³΅μž‘ν•œ 문자 일치 κΈ°λŠ₯ 등을 μ •κ·œμ‹ νŒ¨ν„΄μœΌλ‘œ λΉ λ₯΄κ²Œ μˆ˜ν–‰ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ, μ •κ·œν‘œν˜„μ‹μ€ μ£Όμ„μ΄λ‚˜ 곡백을 ν—ˆμš©ν•˜μ§€ μ•Šκ³  μ—¬λŸ¬κ°€μ§€ 기호λ₯Ό ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 가독성이 쒋지 μ•Šλ‹€λŠ” λ¬Έμ œκ°€ μžˆλ‹€.

μ •κ·œν‘œν˜„μ‹μ€ 크게 λ‹€μŒκ³Ό 같은 역할을 μˆ˜ν–‰ν•œλ‹€.

  • 문자 검색(search)
  • 문자 λŒ€μ²΄(replace)
  • 문자 μΆ”μΆœ(extract)

 

 

2. μ •κ·œ ν‘œν˜„μ‹ λ§Œλ“€κΈ°

  • 방법① μ •κ·œμ‹ λ¦¬ν„°λŸ΄(μŠ¬λž˜μ‰¬"/"둜 κ°μ‹ΈλŠ” νŒ¨ν„΄)을 μ‚¬μš© : μ •κ·œμ‹ λ¦¬ν„°λŸ΄μ€ μŠ€ν¬λ¦½νŠΈκ°€ λΆˆλŸ¬μ™€μ§ˆ λ•Œ μ»΄νŒŒμΌλœλ‹€. λ§Œμ•½ μ •κ·œμ‹μ΄ μƒμˆ˜λΌλ©΄, μ΄λ ‡κ²Œ μ‚¬μš©ν•˜λŠ” 것이 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.
var re = /ab+c/;

 

  • 방법⑑ RegExp 객체의 μƒμ„±μž ν•¨μˆ˜λ₯Ό 호좜 : μƒμ„±μž ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ •κ·œμ‹μ΄ μ‹€ν–‰ μ‹œμ μ— μ»΄νŒŒμΌλœλ‹€. μ •κ·œμ‹μ˜ νŒ¨ν„΄μ΄ 변경될 수 μžˆλŠ” 경우, ν˜Ήμ€ μ‚¬μš©μž μž…λ ₯κ³Ό 같이 λ‹€λ₯Έ μΆœμ²˜λ‘œλΆ€ν„° νŒ¨ν„΄μ„ 가져와야 ν•˜λŠ” κ²½μš°μ— μ‚¬μš©ν•œλ‹€. ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ€ 경우 λ¬Έμžμ—΄ λ‚΄ 검색 맀칭 λŒ€μƒμ΄ 1개 이상이더라도 첫번째 λ§€μΉ­ν•œ λŒ€μƒλ§Œμ„ κ²€μƒ‰ν•˜κ³  μ’…λ£Œν•œλ‹€.

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

 

β€»ν”Œλž˜κ·ΈλŠ” μ•„λž˜μ™€ 같은 μ’…λ₯˜κ°€ μžˆλ‹€.

Flag Description
i λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜μ§€ μ•Šκ³  κ²€μƒ‰ν•œλ‹€.
g λ¬Έμžμ—΄ λ‚΄μ˜ λͺ¨λ“  νŒ¨ν„΄μ„ κ²€μƒ‰ν•œλ‹€.
m λ¬Έμžμ—΄μ˜ 행이 λ°”λ€Œλ”λΌλ„ 검색을 κ³„μ†ν•œλ‹€.

 

 

3. μ •κ·œμ‹ νŒ¨ν„΄(μ°Έκ³  μ‚¬μ΄νŠΈ : https://heropy.blog/2018/10/28/regexp/)

  • νŒ¨ν„΄μ—λŠ” κ²€μƒ‰ν•˜κ³  싢은 λ¬Έμžμ—΄μ„ μ§€μ •ν•œλ‹€. 
  • νŒ¨ν„΄μ€ λ‹¨μˆœ 문자둜 ꡬ성될 μˆ˜λ„ 있고, λ‹¨μˆœ λ¬Έμžμ™€ 특수 문자의 μ‘°ν•©μœΌλ‘œ ꡬ성될 μˆ˜λ„ μžˆλ‹€.
  • νŒ¨ν„΄λ“€μ€ RegExp의 exec λ©”μ†Œλ“œμ™€ test λ©”μ†Œλ“œ  ,그리고 String의  matchλ©”μ†Œλ“œ , replaceλ©”μ†Œλ“œ , searchλ©”μ†Œλ“œ ,  split λ©”μ†Œλ“œμ™€ ν•¨κ»˜ 쓰인닀.

 

3-1) νŒ¨ν„΄ μž‘μ„±ν•˜κΈ°

  • λ‹¨μˆœ 문자 μ‚¬μš©ν•˜κΈ°: λ‹¨μˆœ λ¬ΈμžλŠ” λ¬Έμžμ—΄μ„ μžˆλŠ” κ·ΈλŒ€λ‘œ λŒ€μ‘μ‹œν‚€κ³ μž ν•  λ•Œ μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, /abc/λΌλŠ” νŒ¨ν„΄μ€ λ¬Έμžμ—΄μ—μ„œ μ •ν™•νžˆ 'abc' λΌλŠ” λ¬Έμžλ“€μ΄ λͺ¨λ‘ ν•¨κ»˜ μˆœμ„œλŒ€λ‘œ λ‚˜νƒ€λ‚˜μ•Ό λŒ€μ‘λœλ‹€. 
  • 특수 문자 μ‚¬μš©ν•˜κΈ°: μžˆλŠ” κ·ΈλŒ€λ‘œμ˜ λŒ€μ‘ μ΄μƒμ˜ λŒ€μ‘μ„ ν•„μš”λ‘œ ν•  경우, νŒ¨ν„΄μ— νŠΉμˆ˜ν•œ 문자λ₯Ό ν¬ν•¨μ‹œν‚¨λ‹€. 예λ₯Ό λ“€μ–΄, /ab*c/ νŒ¨ν„΄μ€  'a' 문자 뒀에 0개 μ΄μƒμ˜ 'b' 문자(* λ¬ΈμžλŠ” λ°”λ‘œ μ•žμ˜ λ¬Έμžκ°€ 0개 μ΄μƒμ΄λΌλŠ” 것을 μ˜λ―Έν•œλ‹€)κ°€ λ‚˜νƒ€λ‚˜κ³  λ°”λ‘œ 뒀에 'c' λ¬Έμžκ°€ λ‚˜νƒ€λ‚˜λŠ” 문자 쑰합에 λŒ€μ‘λœλ‹€.
μ •κ·œμ‹ νŒ¨ν„΄(ν‘œν˜„μ‹)  의미
^ μ€„μ˜ μ‹œμž‘μ—μ„œ 일치
$ μ€„μ˜ λμ—μ„œ 일치
. μž„μ˜μ˜ ν•œ λ¬Έμžμ™€ 일치
a|b a λ˜λŠ” b와 일치
* 0회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” λ¬Έμžμ™€ κ°€λŠ₯ν•œ 많이 일치
*? 0회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” λ¬Έμžμ™€ κ°€λŠ₯ν•œ 적게 일치
+ 1회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” λ¬Έμžμ— κ°€λŠ₯ν•œ 많이 일치
+? 1회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” λ¬Έμžμ— κ°€λŠ₯ν•œ 적게 일치
? μ—†κ±°λ‚˜ 1회 κ°€λŠ₯ν•œ 많이 일치
?? μ—†κ±°λ‚˜ 1회 κ°€λŠ₯ν•œ 적게 일치
{}  연속 일치
() μΊ‘μ²˜ν•  κ·Έλ£Ή
(?<>)  캑처 κ·Έλ£Ή μ΄λ¦„ μ§€μ • 
(?:)  μΊ‘μ²˜ν•˜μ§€ μ•ŠλŠ” κ·Έλ£Ή
(?=) μ•žμͺ½ μΌμΉ˜
(?!) λΆ€μ • μ•žμͺ½ μΌμΉ˜
(?<=) λ’€μͺ½ 일치
(?<!) λΆ€μ • λ’€μͺ½ μΌμΉ˜
[abc]  a λ˜λŠ” b λ˜λŠ” c와 일치
[^abc] a λ˜λŠ” b λ˜λŠ” cκ°€ μ•„λ‹Œ λ‚˜λ¨Έμ§€ λ¬Έμžμ— μΌμΉ˜
  • 특수 문자 μ‚¬μš© μ˜ˆμ‹œ
더보기

νŒ¨ν„΄ ν‘œν˜„ 방법

β‘  . : μž„μ˜μ˜ 문자 ν•œ 개

문자의 λ‚΄μš©μ€ 무엇이든지 상관없닀. μ•„λž˜ 예제의 경우 .λ₯Ό 3개 μ—°μ†ν•˜μ—¬ νŒ¨ν„΄μ„ μƒμ„±ν•˜μ˜€μœΌλ―€λ‘œ 3자리 문자λ₯Ό μΆ”μΆœν•œλ‹€. μ΄λ•Œ μΆ”μΆœμ„ λ°˜λ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. λ°˜λ³΅ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν”Œλž˜κ·Έ gλ₯Ό μ‚¬μš©ν•œλ‹€.

const targetStr = 'AA BB Aa Bb'; 

// μž„μ˜μ˜ 문자 3개 
const regexr = /.../;
console.log(targetStr.match(regexr));

// [ 'AA ', index: 0, input: 'AA BB Aa Bb' ]

/ μž„μ˜μ˜ 문자 3개λ₯Ό λ°˜λ³΅ν•˜μ—¬ 검색 
const regexr = /.../g; 
console.log(targetStr.match(regexr)); 

// [ 'AA ', 'BB ', 'Aa ' ]

문자 λ˜λŠ” λ¬Έμžμ—΄μ„ 지정 : μΌμΉ˜ν•˜λŠ” 문자 λ˜λŠ” λ¬Έμžμ—΄μ„ μΆ”μΆœ

μ΄λ•Œ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜λ©° νŒ¨ν„΄κ³Ό μΌμΉ˜ν•œ 첫번째 결과만 λ°˜ν™˜λœλ‹€. λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜μ§€ μ•Šκ²Œ ν•˜λ €λ©΄ ν”Œλž˜κ·Έ iλ₯Ό μ‚¬μš©ν•œλ‹€.

const targetStr = 'AA BB Aa Bb'; 

// 'A'λ₯Ό λŒ€μ†Œλ¬Έμž ꡬ뢄해 검색 
const regexr = /A/; 
console.log(targetStr.match(regexr)); 

// 'A'

// 'A'λ₯Ό λŒ€μ†Œλ¬Έμž ꡬ뢄없이 반볡 검색 
const regexr = /A/ig; 
console.log(targetStr.match(regexr)); 

// [ 'A', 'A', 'A', 'a' ]

β‘‘ νŒ¨ν„΄ 뒀에 + : νŒ¨ν„΄μ„ μ΅œμ†Œ ν•œλ²ˆ 반볡.

μ•„λž˜ 예제의 경우, μ•žμ„  νŒ¨ν„΄μ€ Aμ΄λ―€λ‘œ A+λŠ” A만으둜 이루어진 λ¬Έμžμ—΄(‘A’, ‘AA’, ‘AAA’, …)λ₯Ό μ˜λ―Έν•œλ‹€.

const targetStr = 'AA AAA BB Aa Bb'; 

// 'A'κ°€ ν•œλ²ˆμ΄μƒ λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄('A', 'AA', 'AAA', ...)을 반볡 검색 
const regexr = /A+/g; 
console.log(targetStr.match(regexr)); 

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

| : or의 의미

const targetStr = 'AA BB Aa Bb'; 

// 'A' λ˜λŠ” 'B'λ₯Ό 반볡 검색 
const regexr = /A|B/g; 
console.log(targetStr.match(regexr)); 

// [ 'A', 'A', 'B', 'B', 'A', 'B' ]

λΆ„ν•΄λ˜μ§€ μ•Šμ€ 단어 레벨둜 μΆ”μΆœν•˜κΈ° μœ„ν•΄μ„œλŠ” |와 +λ₯Ό 같이 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

const targetStr = 'AA AAA BB Aa Bb'; 

// 'A' λ˜λŠ” 'B'κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
// 'A', 'AA', 'AAA', ... λ˜λŠ” 'B', 'BB', 'BBB', ... 
const regexr = /A+|B+/g; 
console.log(targetStr.match(regexr)); 

// [ 'AA', 'AAA', 'BB', 'A', 'B' ]

μœ„ μ˜ˆμ œλŠ” νŒ¨ν„΄μ„ or둜 ν•œλ²ˆ 이상 λ°˜λ³΅ν•˜λŠ” 것인데 κ°„λ‹¨νžˆ ν‘œν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€. 

[]λ‚΄μ˜ λ¬ΈμžλŠ” or둜 λ™μž‘ν•œλ‹€. ν‘œν˜„μ‹ [abc]λŠ” a|b|c와 κ°™λ‹€. κ·Έ 뒀에 +λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•žμ„  νŒ¨ν„΄μ„ ν•œλ²ˆ 이상 λ°˜λ³΅ν•˜κ²Œ ν•œλ‹€.

const targetStr = 'AA BB Aa Bb'; 

// 'A' λ˜λŠ” 'B'κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
// 'A', 'AA', 'AAA', ... λ˜λŠ” 'B', 'BB', 'BBB', ... 
const regexr = /[AB]+/g; 
console.log(targetStr.match(regexr)); 

// [ 'AA', 'BB', 'A', 'B' ]

β‘’ 문자 λ²”μœ„ 지정 : []내에 -λ₯Ό μ‚¬μš©. μ•„λž˜μ˜ 경우 λŒ€λ¬Έμž μ•ŒνŒŒλ²³μ„ μΆ”μΆœν•œλ‹€.

const targetStr = 'AA BB ZZ Aa Bb'; 

// 'A' ~ 'Z'κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
// 'A', 'AA', 'AAA', ... λ˜λŠ” 'B', 'BB', 'BBB', ... ~ λ˜λŠ” 'Z', 'ZZ', 'ZZZ', ... 
const regexr = /[A-Z]+/g; 
console.log(targetStr.match(regexr)); 

// [ 'AA', 'BB', 'ZZ', 'A', 'B' ]

λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜μ§€ μ•Šκ³  μ•ŒνŒŒλ²³(λ²”μœ„)을 μΆ”μΆœ

const targetStr = 'AA BB Aa Bb'; 

// 'A' ~ 'Z' λ˜λŠ” 'a' ~ 'z'κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
const regexr = /[A-Za-z]+/g; 
// μ•„λž˜μ™€ λ™μΌν•˜λ‹€. 
// const regexr = /[A-Z]+/gi; 
console.log(targetStr.match(regexr)); 

// [ 'AA', 'BB', 'Aa', 'Bb' ]

β‘£ 숫자λ₯Ό μΆ”μΆœ

νŒ¨ν„΄μ— 컴마λ₯Ό ν¬ν•¨μ‹œν‚€λ©΄ 컴마 λ•Œλ¬Έμ— κ²°κ³Όκ°€ λΆ„λ¦¬λ˜μ§€ μ•ŠλŠ”λ‹€.

const targetStr = 'AA BB Aa Bb 24,000'; 

// '0' ~ '9'κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
const regexr = /[0-9]+/g; 
console.log(targetStr.match(regexr)); 

// [ '24', '000' ]

// '0' ~ '9' λ˜λŠ” ','κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
const regexr = /[0-9,]+/g; 
console.log(targetStr.match(regexr)); 

// [ '24,000' ]

이것을 κ°„λ‹¨νžˆ ν‘œν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€. 

\d : 숫자λ₯Ό 의미. \DλŠ” \d와 λ°˜λŒ€λ‘œ λ™μž‘ν•œλ‹€.

const targetStr = 'AA BB Aa Bb 24,000'; 

// '0' ~ '9' λ˜λŠ” ','κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
let regexr = /[\d,]+/g; 
console.log(targetStr.match(regexr)); 

// [ '24,000' ] 

// '0' ~ '9'κ°€ μ•„λ‹Œ 문자(μˆ«μžκ°€ μ•„λ‹Œ 문자) λ˜λŠ” ','κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
regexr = /[\D,]+/g; 
console.log(targetStr.match(regexr)); 

// [ 'AA BB Aa Bb ', ',' ]

\w : μ•ŒνŒŒλ²³κ³Ό 숫자λ₯Ό 의미. \WλŠ” \w와 λ°˜λŒ€λ‘œ λ™μž‘ν•œλ‹€.

const targetStr = 'AA BB Aa Bb 24,000'; 

// μ•ŒνŒŒλ²³κ³Ό 숫자 λ˜λŠ” ','κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
let regexr = /[\w,]+/g; 
console.log(targetStr.match(regexr)); 

// [ 'AA', 'BB', 'Aa', 'Bb', '24,000' ] 

// μ•ŒνŒŒλ²³κ³Ό μˆ«μžκ°€ μ•„λ‹Œ 문자 λ˜λŠ” ','κ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ 반볡 검색 
regexr = /[\W,]+/g; 
console.log(targetStr.match(regexr)); 

// [ ' ', ' ', ' ', ' ', ',' ]
  • 자주 μ‚¬μš©λ˜λŠ” 특수 문자

Charater

Meaning

\d

숫자 λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€. [0-9]와 λ™μΌν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /\d/ λ˜λŠ” /[0-9]/λŠ” "B2 is the suite number."μ—μ„œ '2'에 λŒ€μ‘λ©λ‹ˆλ‹€.

\D 

숫자 λ¬Έμžκ°€ μ•„λ‹Œ λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€. [^0-9]와 λ™μΌν•©λ‹ˆλ‹€. 

예λ₯Ό λ“€μ–΄, /\D/ λ˜λŠ” /[^0-9]/λŠ” "B2 is the suite number."의 'B'에 λŒ€μ‘λ©λ‹ˆλ‹€.

\s

슀페이슀, νƒ­, νΌν”Όλ“œ, μ€„ λ°”κΏˆ λ¬Έμžλ“±μ„ ν¬ν•¨ν•œ ν•˜λ‚˜μ˜ κ³΅λ°± λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€. [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].와 λ™μΌν•©λ‹ˆλ‹€. 

예λ₯Ό λ“€μ–΄, /\s\w*/λŠ” "foo bar."의 ' bar'에 λŒ€μ‘λ©λ‹ˆλ‹€. 

\S

곡백 λ¬Έμžκ°€ μ•„λ‹Œ ν•˜λ‚˜μ˜ λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€. [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. μ™€ λ™μΌν•©λ‹ˆλ‹€. 

예λ₯Ό λ“€μ–΄, /\S\w*/λŠ” "foo bar."의 'foo' μ— λŒ€μ‘λ©λ‹ˆλ‹€. 

\w

밑쀄 λ¬Έμžλ₯Ό ν¬ν•¨ν•œ μ˜μˆ«μž λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€. [A-Za-z0-9_] μ™€ λ™μΌν•©λ‹ˆλ‹€. (μ—­μ£Ό: μ—¬κΈ°μ— λŒ€μ‘λ˜λŠ” λ¬Έμžλ₯Ό λ‹¨μ–΄ λ¬ΈμžλΌκ³  ν•©λ‹ˆλ‹€.) 

예λ₯Ό λ“€μ–΄, /\w/λŠ” "apple,"의 'a' 에 λŒ€μ‘λ˜κ³ , "$5.28,"의 '5'에 λŒ€μ‘λ˜κ³ ,"3D."의 '3'에 λŒ€μ‘λ©λ‹ˆλ‹€. 

\W

단어 λ¬Έμžκ°€ μ•„λ‹Œ λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€. [^A-Za-z0-9_] μ™€ λ™μΌν•©λ‹ˆλ‹€. 

예λ₯Ό λ“€μ–΄, /\W/ λ˜λŠ” /[^A-Za-z0-9_]/λŠ” "50%."의 '%' μ— λŒ€μ‘λ©λ‹ˆλ‹€. 

더보기

κ·Έ μ™Έμ˜ λͺ¨λ“  특수문자 λͺ©λ‘

Character

Meaning

\

λ‹€μŒμ˜ κ·œμΉ™μ— 따라 μΌμΉ˜ν•©λ‹ˆλ‹€:

특수 λ¬Έμžκ°€ μ•„λ‹Œ 문자(non-special character) μ•žμ—μ„œ μ‚¬μš©λœ λ°±μŠ¬λž˜μ‹œλŠ” 'ν•΄λ‹Ή λ¬ΈμžλŠ” νŠΉλ³„ν•˜κ³ , 문자 κ·ΈλŒ€λ‘œ ν•΄μ„λ˜λ©΄ μ•ˆλœλ‹€'λŠ” 사싀을 κ°€λ¦¬ν‚΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ•žμ— \κ°€ μ—†λŠ” 'b'λŠ” 보톡 μ†Œλ¬Έμž bκ°€ λ‚˜μ˜€λŠ” νŒ¨ν„΄κ³Ό λŒ€μ‘λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ '\b' μžμ²΄λŠ” μ–΄λ–€ λ¬Έμžμ™€λ„ λŒ€μ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€; 이 λ¬ΈμžλŠ” νŠΉλ³„ν•œ λ‹¨μ–΄ 경계 문자λ₯Ό ν˜•μ„±ν•©λ‹ˆλ‹€.

특수 문자 μ•žμ— μœ„μΉ˜ν•œ λ°±μŠ¬λž˜μ‹œλŠ” 'λ‹€μŒμ— λ‚˜μ˜€λŠ” λ¬ΈμžλŠ” νŠΉλ³„ν•˜μ§€μ•Šκ³ , 문자 κ·ΈλŒ€λ‘œ ν•΄μ„λ˜μ–΄μ•Ό ν•œλ‹€'λŠ” 사싀을 κ°€λ¦¬ν‚΅λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄, νŒ¨ν„΄ /a*/ μ—μ„œμ˜ 특수문자 '*'λŠ” 0개 μ΄μƒμ˜ 'a' λ¬Έμžκ°€ λ“±μž₯함을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄μ™€λŠ” λ‹€λ₯΄κ²Œ, νŒ¨ν„΄ /a\*/ λŠ” '*'이 νŠΉλ³„ν•˜μ§€ μ•Šλ‹€λŠ” 것을 λ‚˜νƒ€λ‚΄λ©°, 'a*'와 같은 λ¬Έμžμ—΄κ³Ό λŒ€μ‘λ  수 μžˆμŠ΅λ‹ˆλ‹€.

RegExp("pattern") ν‘œκΈ°λ₯Ό μ“°λ©΄μ„œ \ 자체λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ ν•˜λŠ” 것을 μžŠμ§€ λ§ˆμ„Έμš”. μ™œλƒν•˜λ©΄ \ λŠ” λ¬Έμžμ—΄μ—μ„œλ„ μ΄μŠ€μΌ€μ΄ν”„ 문자이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. (μ—­μ£Ό: /a\*/ μ™€ 같은 νŒ¨ν„΄μ„ μƒμ„±μžλ‘œ λ§Œλ“€λ €λ©΄ new RegExp('a\\*')와 같이 λ°±μŠ¬λž˜μ‹œ 자체λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ‹œμΌœμ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.)

^ μž…λ ₯의 μ‹œμž‘ 뢀뢄에 λŒ€μ‘λ©λ‹ˆλ‹€. λ§Œμ•½ 닀쀑행 ν”Œλž˜κ·Έκ°€ 참으둜 μ„€μ •λ˜μ–΄ μžˆλ‹€λ©΄, 쀄 λ°”κΏˆ 문자 λ°”λ‘œ λ‹€μŒ 뢀뢄과도 λŒ€μ‘λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /^A/ λŠ” "an A" 의 'A'μ™€λŠ” λŒ€μ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€, κ·ΈλŸ¬λ‚˜ "An E" 의 'A'μ™€λŠ” λŒ€μ‘λ©λ‹ˆλ‹€.

'^' κ°€ λ¬Έμžμ…‹([abc]) νŒ¨ν„΄μ˜ 첫 κΈ€μžλ‘œ 쓰인닀면, κ·Έ λ•ŒλŠ” μ „ν˜€ λ‹€λ₯Έ 의미λ₯Ό κ°€μ§‘λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ μ—­ λ¬Έμžμ…‹μ„ μ°Έκ³ ν•˜μ„Έμš”.
$

μž…λ ₯의 끝 λΆ€λΆ„κ³Ό λŒ€μ‘λ©λ‹ˆλ‹€. λ§Œμ•½ 닀쀑행 ν”Œλž˜κ·Έκ°€ 참으둜 μ„€μ •λ˜μ–΄ μžˆλ‹€λ©΄, 쀄 λ°”κΏˆ 문자의 λ°”λ‘œ μ•ž 뢀뢄과도 λŒ€μ‘λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /t$/ λŠ” "eater" 의 't'μ—λŠ” λŒ€μ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€, κ·ΈλŸ¬λ‚˜ "eat" κ³ΌλŠ” λŒ€μ‘λ©λ‹ˆλ‹€.

*

μ•žμ˜ ν‘œν˜„μ‹μ΄ 0회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” λΆ€λΆ„κ³Ό λŒ€μ‘λ©λ‹ˆλ‹€. {0,} 와 같은 μ˜λ―Έμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /bo*/ λŠ” "A ghost booooed" 의 'boooo' 와 λŒ€μ‘λ˜κ³ , "A bird warbled" 의 'b'에 λŒ€μ‘λ˜μ§€λ§Œ "A goat grunted" λ‚΄μ˜ μ–΄λŠ 뢀뢄과도 λŒ€μ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

+

μ•žμ˜ ν‘œν˜„μ‹μ΄ 1회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” λΆ€λΆ„κ³Ό λŒ€μ‘λ©λ‹ˆλ‹€. {1,} μ™€ 같은 μ˜λ―Έμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /a+/ λŠ” "candy"의 'a'에 λŒ€μ‘λ˜κ³  "caaaaaaandy" 의 λͺ¨λ“  'a'듀에 λŒ€μ‘λ˜μ§€λ§Œ, "cndy" λ‚΄μ˜ μ–΄λŠ 뢀뢄과도 λŒ€μ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

? μ•žμ˜ ν‘œν˜„μ‹μ΄ 0 λ˜λŠ” 1회 λ“±μž₯ν•˜λŠ” λΆ€λΆ„κ³Ό λŒ€μ‘λ©λ‹ˆλ‹€. {0,1} μ™€ 같은 μ˜λ―Έμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /e?le?/ λŠ” "angel"의 'el' 에 λŒ€μ‘λ˜κ³ , "angle"의 'le' 에 λŒ€μ‘λ˜κ³  λ˜ν•œ "oslo" 의 'l'에도 λŒ€μ‘λ©λ‹ˆλ‹€.

λ§Œμ•½ μˆ˜λŸ‰μž *, +, ?, {} λ°”λ‘œ 뒀에 μ‚¬μš©ν•˜λ©΄, 기본적으둜 νƒμš•μŠ€λŸ½λ˜(κ°€λŠ₯ν•œ ν•œ 많이 λŒ€μ‘μ‹œν‚΄) μˆ˜λŸ‰μžλ₯Ό νƒμš•μŠ€λŸ½μ§€ μ•Šκ²Œ(κ°€λŠ₯ν•œ κ°€μž₯ 적은 λ¬Έμžλ“€μ— λŒ€μ‘μ‹œν‚΄) λ§Œλ“­λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄, /\d+/λ₯Ό "123abc"에 μ μš©μ‹œν‚€λ©΄ "123"κ³Ό λŒ€μ‘λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ /\d+?/λ₯Ό 같은 λ¬Έμžμ—΄μ— μ μš©μ‹œν‚€λ©΄ 였직 "1"과만 λŒ€μ‘λ©λ‹ˆλ‹€.

λ˜ν•œ 이 λ¬ΈμžλŠ” x(?=y) μ™€ x(?!y) ν•­λͺ©μ—μ„œ μ„€λͺ…ν•˜λŠ” 바와 같이 사전 검증(lookahead assertion)을 μœ„ν•΄μ„œλ„ μ“°μž…λ‹ˆλ‹€.
 
.

κ°œν–‰ 문자λ₯Ό μ œμ™Έν•œ λͺ¨λ“  λ‹¨μΌ λ¬Έμžμ™€ λŒ€μ‘λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /.n/λŠ” "nay, an apple is on the tree"μ—μ„œ 'an'κ³Ό 'on'에 λŒ€μ‘λ˜μ§€λ§Œ, 'nay' μ—λŠ” λŒ€μ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

(x)

λ‹€μŒμ˜ μ˜ˆμ œκ°€ λ³΄μ—¬μ£ΌλŠ”κ²ƒ 처럼 'x'에 λŒ€μ‘λ˜κ³ , 그것을 κΈ°μ–΅ν•©λ‹ˆλ‹€. κ΄„ν˜ΈλŠ” ν¬νš κ΄„ν˜Έ(capturing parentheses)라 λΆˆλ¦½λ‹ˆλ‹€.

νŒ¨ν„΄ /(foo) (bar) \1 \2/ μ•ˆμ˜ '(foo)' 와 '(bar)'λŠ” λ¬Έμžμ—΄"foo bar foo bar"μ—μ„œ 처음의 두 단어에 λŒ€μ‘λ˜κ³  이λ₯Ό κΈ°μ–΅ν•©λ‹ˆλ‹€. νŒ¨ν„΄ λ‚΄λΆ€μ˜ \1와 \2λŠ” λ¬Έμžμ—΄μ˜ λ§ˆμ§€λ§‰ 두 λ‹¨μ–΄μ— λŒ€μ‘λ©λ‹ˆλ‹€. (μ—­μ£Ό: \n νŒ¨ν„΄μ€ μ•žμ˜ n번째 ν¬νšκ΄„ν˜Έμ— λŒ€μ‘λœ λ¬Έμžμ—΄κ³Ό λ˜‘κ°™μ€ λ¬Έμžμ—΄μ— λŒ€μ‘λ©λ‹ˆλ‹€.) \1, \2, \nκ³Ό 같은 문법은 μ •κ·œμ‹μ˜ νŒ¨ν„΄ λΆ€λΆ„μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€. μ •κ·œμ‹μ˜ μΉ˜ν™˜ λΆ€λΆ„μ—μ„œλŠ” $1, $2, $nκ³Ό 같은 문법이 μ‚¬μš©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄, 'bar foo'.replace( /(...) (...)/, '$2 $1')와 같이 μ‚¬μš©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. $& νŒ¨ν„΄μ€ μ•žμ—μ„œ λŒ€μ‘λœ 전체 λ¬Έμžμ—΄μ„ κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

(?:x) 'x'에 λŒ€μ‘λ˜μ§€λ§Œ λŒ€μ‘λœ 것을 κΈ°μ–΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ΄„ν˜ΈλŠ” λΉ„ν¬νš κ΄„ν˜Έ(non-capturing parentheses)라고 뢈리우고, μ •κ·œμ‹ μ—°μ‚°μžκ°€ 같이 λ™μž‘ν•  수 있게 ν•˜μœ„ ν‘œν˜„μ„ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ •κ·œμ‹ 예제 /(?:foo){1,2}/을 μƒκ°ν•΄λ³΄μ„Έμš”. λ§Œμ•½ μ •κ·œμ‹μ΄ /foo{1,2}/라면, {1,2}λŠ” 'foo'의 λ§ˆμ§€λ§‰ 'o' μ—λ§Œ μ μš©λ©λ‹ˆλ‹€. λΉ„ν¬νš κ΄„ν˜Έκ³Ό 같이 쓰인닀면, {1,2}λŠ” 단어 'foo' 전체에 μ μš©λ©λ‹ˆλ‹€.
x(?=y)

였직 'y'κ°€ λ’€λ”°λΌμ˜€λŠ” 'x'μ—λ§Œ λŒ€μ‘λ©λ‹ˆλ‹€. 이것은 lookahead 라고 λΆˆλ¦½λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /Jack(?=Sprat)/ λŠ” 'Sprat'κ°€ λ’€λ”°λΌμ˜€λŠ” 'Jack' μ—λ§Œ λŒ€μ‘λ©λ‹ˆλ‹€. /Jack(?=Sprat|Frost)/λŠ” 'Sprat' λ˜λŠ” 'Frost'κ°€ λ’€λ”°λΌμ˜€λŠ” 'Jack'μ—λ§Œ λŒ€μ‘λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, 'Sprat' 및 'Frost' λŠ” λŒ€μ‘ κ²°κ³Όμ˜ 일뢀가 μ•„λ‹™λ‹ˆλ‹€.

x(?!y)

'x'뒀에  'y'κ°€ μ—†λŠ”κ²½μš°μ—λ§Œ 'x'에 μΌμΉ˜ν•©λ‹ˆλ‹€. 이것은 negated lookahead 라고 λΆˆλ¦½λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /\d+(?!\.)/λŠ” μ†Œμˆ«μ μ΄ λ’€λ”°λΌμ˜€μ§€ μ•ŠλŠ” μˆ«μžμ— μΌμΉ˜ν•©λ‹ˆλ‹€. μ •κ·œμ‹ /\d+(?!\.)/.exec("3.141")λŠ” '3.141' 이 μ•„λ‹Œ '141'에 μΌμΉ˜ν•©λ‹ˆλ‹€.

x|y

'x' λ˜λŠ” 'y'에 λŒ€μ‘λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /green|red/λŠ” "green apple"의 'green'에 λŒ€μ‘λ˜κ³ , "red apple."의 'red'에 λŒ€μ‘λ©λ‹ˆλ‹€.

{n} μ•ž ν‘œν˜„μ‹μ΄ n번 λ‚˜νƒ€λ‚˜λŠ” 뢀뢄에 λŒ€μ‘λ©λ‹ˆλ‹€. n은 λ°˜λ“œμ‹œ μ–‘μ˜ μ •μˆ˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /a{2}/λŠ” "candy,"의 'a'μ—λŠ” λŒ€μ‘λ˜μ§€ μ•Šμ§€λ§Œ, "caandy,"의 λͺ¨λ“  a 와, "caaandy."의 첫 두 a μ—λŠ” λŒ€μ‘λ©λ‹ˆλ‹€.
{n,m}

nκ³Ό m은 μ–‘μ˜ μ •μˆ˜μ΄κ³ , n <= mλ₯Ό λ§Œμ‘±ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ•ž λ¬Έμžκ°€ μ΅œμ†Œ n개, μ΅œλŒ€ mκ°œκ°€ λ‚˜νƒ€λ‚˜λŠ” 뢀뢄에 λŒ€μ‘λ©λ‹ˆλ‹€. m이 μƒλž΅λœλ‹€λ©΄, m은 ∞둜 μ·¨κΈ‰λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /a{1,3}/λŠ” "cndy"μ—μ„œ 아무것에도 λŒ€μ‘λ˜μ§€ μ•Šμ§€λ§Œ, "caandy,"의 첫 두 a 와 "caaaaaaandy"의 첫 μ„Έ a 에 λŒ€μ‘λ©λ‹ˆλ‹€. "caaaaaaandy"μ—μ„œ 더 λ§Žμ€ a 듀이 μžˆμ§€λ§Œ, "aaa"μ—λ§Œ λŒ€μ‘λœλ‹€λŠ” 점에 μ£Όλͺ©ν•˜μ„Έμš”.

[xyz] λ¬Έμžμ…‹(Character set) μž…λ‹ˆλ‹€. 이 νŒ¨ν„΄ νƒ€μž…μ€ κ΄„ν˜Έ μ•ˆμ˜ μ–΄λ–€ 문자(μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€κΉŒμ§€ 포함)와도 λŒ€μ‘λ©λ‹ˆλ‹€. 점(.) μ΄λ‚˜ λ³„ν‘œ (*) 같은 특수 λ¬ΈμžλŠ” λ¬Έμžμ…‹ λ‚΄λΆ€μ—μ„œλŠ” 특수 λ¬Έμžκ°€ μ•„λ‹™λ‹ˆλ‹€. λ”°λΌμ„œ μ΄μŠ€μΌ€μ΄ν”„μ‹œν‚¬ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ΄ν”ˆμ„ μ΄μš©ν•˜μ—¬ 문자의 λ²”μœ„λ₯Ό 지정해쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, νŒ¨ν„΄ [a-d] λŠ” νŒ¨ν„΄ [abcd] μ™€ λ˜‘κ°™μ΄ λ™μž‘ν•˜λ©°, "brisket"의 'b' 에 μΌμΉ˜ν•˜κ³ , "city"의 'c' 에 μΌμΉ˜ν•©λ‹ˆλ‹€. νŒ¨ν„΄ /[a-z.]+/ μ™€ /[\w.]+/ λŠ” "test.i.ng" 전체 λ¬Έμžμ—΄μ΄ μΌμΉ˜ν•©λ‹ˆλ‹€.
[^xyz]

λΆ€μ • λ¬Έμžμ…‹(negated character set) λ˜λŠ” 보좩 λ¬Έμžμ…‹(complemented character set)μž…λ‹ˆλ‹€. κ΄„ν˜Έ 내뢀에 λ“±μž₯ν•˜μ§€ μ•ŠλŠ” μ–΄λ–€ λ¬Έμžμ™€λ„ λŒ€μ‘λ©λ‹ˆλ‹€. ν•˜μ΄ν”ˆμ„ μ΄μš©ν•˜μ—¬ 문자의 λ²”μœ„λ₯Ό 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. 일반적인 λ¬Έμžμ…‹μ—μ„œ μž‘λ™ν•˜λŠ” λͺ¨λ“  것은 μ—¬κΈ°μ—μ„œλ„ μž‘λ™ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, νŒ¨ν„΄[^abc]λŠ” νŒ¨ν„΄[^a-c]와 λ™μΌν•©λ‹ˆλ‹€. 두 νŒ¨ν„΄μ€ "brisket"의 'r', "chop."의 'h' 에 λŒ€μ‘λ©λ‹ˆλ‹€.

[\b] 백슀페이슀(U+0008)에 λŒ€μ‘λ©λ‹ˆλ‹€. 이와 같이, 백슀페이슀 문자 λ¦¬ν„°λŸ΄μ— λŒ€μ‘μ‹œν‚€λ €λ©΄, λŒ€κ΄„ν˜Έ("[]")λ₯Ό μ΄μš©ν•΄μ•Όλ§Œ ν•©λ‹ˆλ‹€. (\b와 ν˜Όλ™ν•˜μ§€ λ§ˆμ„Έμš”.)
\b

단어 κ²½κ³„에 λŒ€μ‘λ©λ‹ˆλ‹€. λ‹¨μ–΄ κ²½κ³„λŠ” λ‹€λ₯Έ '단어 문자'κ°€ μ•žμ΄λ‚˜ 뒀에 λ“±μž₯ν•˜μ§€ μ•ŠλŠ” μœ„μΉ˜μ— λŒ€μ‘λ©λ‹ˆλ‹€. λ‹¨μ–΄μ˜ κ²½κ³„λŠ” λŒ€μ‘ 결과에 ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 사싀에 μ£Όμ˜ν•˜μ„Έμš”. λ‹€λ₯Έ λ§λ‘œλŠ”, λ‹¨μ–΄μ˜ 경계에 λŒ€μ‘λ˜λŠ” λ¬Έμžμ—΄μ˜ κΈΈμ΄λŠ” 항상 0μž…λ‹ˆλ‹€. (νŒ¨ν„΄ [\b]와 ν˜Όλ™ν•˜μ§€ λ§ˆμ„Έμš”.)

예제:
/\bm/λŠ” "moon"의 'm'에 λŒ€μ‘λ©λ‹ˆλ‹€;
/oo\b/ λŠ” "moon"의 'oo' 뢀뢄에 λŒ€μ‘λ˜μ§€ μ•ŠλŠ”λ°, μ™œλƒν•˜λ©΄ 'oo'λ₯Ό λ’€λ”°λΌμ˜€λŠ” 'n'이 λ‹¨μ–΄ 문자이기 λ•Œλ¬Έμž…λ‹ˆλ‹€;
/oon\b/λŠ” "moon"의 'oon'에 λŒ€μ‘λ©λ‹ˆλ‹€. μ™œλƒν•˜λ©΄, 'oon'은 λ¬Έμžμ—΄μ˜ λμ΄λΌμ„œ, λ’€λ”°λΌμ˜€λŠ” 단어 λ¬Έμžκ°€ μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ ;
/\w\b\w/λŠ” μ–΄λ–€ 것에도 μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄, 단어 λ¬ΈμžλŠ” μ ˆλŒ€λ‘œ λΉ„ 단어 λ¬Έμžμ™€ 단어 문자 λ‘κ°œκ°€ λ’€λ”°λΌμ˜¬μˆ˜ μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

μˆ™μ§€ν•˜μ„Έμš”: μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ •κ·œμ‹ 엔진은 νŠΉμ • 문자 집합을 '단어 문자'둜 μ •μ˜ν•©λ‹ˆλ‹€. 이 집단에 μ†ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  λ¬ΈμžλŠ” 단어 뢄리(word break) 둜 μ—¬κ²¨μ§‘λ‹ˆλ‹€. 단어 λ¬Έμžλ‘œ κ°„μ£Όλ˜λŠ” λ¬Έμžλ“€μ€ μ–Όλ§ˆ μ—†μŠ΅λ‹ˆλ‹€: μ˜€λ‘œμ§€ 둜마자 μ†Œλ¬Έμžμ™€ λŒ€λ¬Έμž, 10μ§„μˆ˜ 숫자, 밑쀄 문자둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. "é" λ˜λŠ” "ü" 같이, κ°•μ„Έ ν‘œμ‹œ λ¬Έμžλ“€μ€ μ•ˆνƒ€κΉκ²Œλ„ 단어 뢄리(word breaks) 둜 μ·¨κΈ‰λ©λ‹ˆλ‹€.

\B

단어 경계가 μ•„λ‹Œ 뢀뢄에 λŒ€μ‘λ©λ‹ˆλ‹€. μ•„λž˜μ™€ 같은 κ²½μš°λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€:

  • λ¬Έμžμ—΄μ˜ 첫 번째 λ¬Έμžκ°€ 단어 λ¬Έμžκ°€ μ•„λ‹Œ 경우, ν•΄λ‹Ή 문자의 μ•ž 뢀뢄에 λŒ€μ‘λ©λ‹ˆλ‹€.
  • λ¬Έμžμ—΄μ˜ λ§ˆμ§€λ§‰ λ¬Έμžκ°€ 단어 λ¬Έμžκ°€ μ•„λ‹Œ 경우, ν•΄λ‹Ή 문자의 λ’· 뢀뢄에 λŒ€μ‘λ©λ‹ˆλ‹€.
  • 두 단어 문자의 사이에 λŒ€μ‘λ©λ‹ˆλ‹€.
  • 단어 λ¬Έμžκ°€ μ•„λ‹Œ 두 문자 사이에 λŒ€μ‘λ©λ‹ˆλ‹€.
  • 빈 λ¬Έμžμ—΄μ— λŒ€μ‘λ©λ‹ˆλ‹€.

λ¬Έμžμ—΄μ˜ μ‹œμž‘ λΆ€λΆ„κ³Ό 끝 뢀뢄은 단어가 μ•„λ‹Œ κ²ƒμœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /\B../ λŠ” "noonday"의 'oo'와 λŒ€μ‘λ˜λ©°, /y\B./ λŠ” "possibly yesterday."의 'ye'와 λŒ€μ‘λ©λ‹ˆλ‹€.

\cX

λ¬Έμžμ—΄ λ‚΄λΆ€μ˜ μ œμ–΄ λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€. μ—¬κΈ°μ„œ XλŠ” Aμ—μ„œ ZκΉŒμ§€μ˜ 문자 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /\cM/λŠ” λ¬Έμžμ—΄μ—μ„œ control-M (U+000D)에 λŒ€μ‘λ©λ‹ˆλ‹€.

\f νΌν”Όλ“œ (U+000C) λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€.
\n 쀄 λ°”κΏˆ (U+000A) λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€.
\r 캐리지 리턴(U+000D) λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€.
\t νƒ­ (U+0009) λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€.
\v 수직 νƒ­(U+000B) λ¬Έμžμ— λŒ€μ‘λ©λ‹ˆλ‹€.
\n

μ •κ·œμ‹ λ‚΄λΆ€μ˜ n번째 κ΄„ν˜Έμ—μ„œ λŒ€μ‘λœ λΆ€λΆ„에 λŒ€ν•œ μ—­μ°Έμ‘° μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ, n은 μ–‘μ˜ μ •μˆ˜μž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, /apple(,)\sorange\1/λŠ” "apple, orange, cherry, peach."의 'apple, orange,' 에 μΌμΉ˜ν•©λ‹ˆλ‹€.

\0 널 (U+0000)λ¬Έμžμ— λŒ€μ‘ν•©λ‹ˆλ‹€. 이 λ•Œ λ‹€λ₯Έ 숫자λ₯Ό 뒀에 쓰지 λ§ˆμ„Έμš”. μ™œλƒν•˜λ©΄ \0<digits>λŠ” 8진 μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
\xhh μ½”λ“œκ°€ hh(두 16진 숫자)인 λ¬Έμžμ— μΌμΉ˜ν•©λ‹ˆλ‹€.
\uhhhh μ½”λ“œκ°€ hhhh(λ„€κ°œμ˜ 16진 숫자)인 λ¬Έμžμ— μΌμΉ˜ν•©λ‹ˆλ‹€.

 

 

4. κ·Έλ£Ή

  • JavaScriptλŠ” μ •κ·œ ν‘œν˜„μ‹, μΊ‘처 κ·Έλ£Ή , λΉ„ 캑처 κ·Έλ£Ή λ° λ―Έλ¦¬λ³΄κΈ° μ˜ λͺ‡ 가지 μœ ν˜•μ˜ 그룹을 μ§€μ›ν•œλ‹€.
  • 그룹을 μ‚¬μš©ν•˜λ©΄ ν•˜μœ„ ν‘œν˜„μ‹μ„ λ§Œλ“€κ³ , λ‹¨μœ„ ν•˜λ‚˜λ‘œ μ·¨κΈ‰ν•  수 μžˆλ‹€.

 

4-1) κ·Έλ£Ήν™”

ν‘œν˜„μ‹μ˜ 일뢀λ₯Ό νŒ¨ν„΄ ()둜 λ¬Άμ–΄μ£Όμ–΄ κ·Έ μ•ˆμ˜ 식이 더 높은 μš°μ„ μˆœμœ„λ₯Ό 갖도둝 ν•œλ‹€. 

 

예제) ν‘œν˜„식 ko+λŠ” "k"λ₯Ό κ²€μƒ‰ν•˜κ³  "o"λ₯Ό 1회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” 문자둜 κ²€μƒ‰ν•œλ‹€. 
ν•˜μ§€λ§Œ ν‘œν˜„μ‹ (ko)+λŠ” "k"와 "o"λ₯Ό κ·Έλ£Ήν™”ν–ˆκΈ° λ•Œλ¬Έμ— "ko"λ₯Ό 1회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” 문자둜 κ²€μƒ‰ν•œλ‹€.

const ko = 'kokokoko'; 
const koooo = 'kooookoooo'; 

#κ·Έλ£Ήν™” O
ko.match(/ko+/); 
// ["ko", index: 0, input: "kokokoko", groups: undefined] 

koooo.match(/ko+/); 
// ["koooo", index: 0, input: "kooookoooo", groups: undefined] 


#κ·Έλ£Ήν™” X
ko.match(/(ko)+/); 
// ["kokokoko", "ko", index: 0, input: "kokokoko", groups: undefined] 

koooo.match(/(ko)+/); 
// ["ko", "ko", index: 0, input: "kooookoooo", groups: undefined] 

κ·Έλ ‡λ‹€λ©΄ μœ„ μ˜ˆμ œμ—μ„œ νŒ¨ν„΄ ()λ₯Ό μ‚¬μš©ν•œ μ •κ·œμ‹λ“€μ€ κ²°κ³Όλ₯Ό ν”Œλž˜κ·Έ gλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λŠ”λ° μ–΄λ–»κ²Œ 2개의 κ²°κ³Όκ°€ λ‚˜μ™”μ„κΉŒ? - 캑처 κΈ°λŠ₯

4-2) 캑처(capturing)

  • νŒ¨ν„΄ ()λŠ” κ΄„ν˜Έ μ•ˆμ— μžˆλŠ” ν‘œν˜„μ‹μ„ 캑처(볡사본)ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.
  • 그룹에 μΌμΉ˜ν•˜λŠ” κ²°κ³Όλ₯Ό λ‚˜μ€‘μ— μ“Έ 수 μžˆλ„λ‘ 캑쳐가λŠ₯ν•˜λ‹€.
  • ν•˜μ§€λ§Œ, μΊ‘μ³ν•˜λŠ” 그룹을 μ‚¬μš©ν•˜λ©΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 그룹을 μ‚¬μš©ν•  λ•Œλ³΄λ‹€ μ„±λŠ₯이 떨어진닀.