μ± <λ¬λμλ°μ€ν¬λ¦½νΈ>λ₯Ό κΈ°λ³ΈμΌλ‘ λ°°μ΄ μλ°μ€ν¬λ¦½νΈ λ΄μ©μ λλ€.
λͺ©μ°¨
- <μ κ· ννμ> 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 |
\ |
λ€μμ κ·μΉμ λ°λΌ μΌμΉν©λλ€: |
^ | μ
λ ₯μ μμ λΆλΆμ λμλ©λλ€. λ§μ½ λ€μ€ν νλκ·Έκ° μ°ΈμΌλ‘ μ€μ λμ΄ μλ€λ©΄, μ€ λ°κΏ λ¬Έμ λ°λ‘ λ€μ λΆλΆκ³Όλ λμλ©λλ€. μλ₯Ό λ€μ΄, /^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)λΌ λΆλ¦½λλ€. |
(?: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]μ νΌλνμ§ λ§μΈμ.) μμ : μμ§νμΈμ: μλ°μ€ν¬λ¦½νΈμ μ κ·μ μμ§μ νΉμ λ¬Έμ μ§ν©μ 'λ¨μ΄ λ¬Έμ'λ‘ μ μν©λλ€. μ΄ μ§λ¨μ μνμ§ μλ λͺ¨λ λ¬Έμλ λ¨μ΄ λΆλ¦¬(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)
- ν¨ν΄ ()λ κ΄νΈ μμ μλ ννμμ μΊ‘μ²(볡μ¬λ³Έ)νμ¬ μ¬μ©νλ€.
- κ·Έλ£Ήμ μΌμΉνλ κ²°κ³Όλ₯Ό λμ€μ μΈ μ μλλ‘ μΊ‘μ³κ°λ₯νλ€.
- νμ§λ§, μΊ‘μ³νλ κ·Έλ£Ήμ μ¬μ©νλ©΄ μ¬μ©νμ§ μλ κ·Έλ£Ήμ μ¬μ©ν λλ³΄λ€ μ±λ₯μ΄ λ¨μ΄μ§λ€.
'π° μΈμ΄ > JS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λΈλΌμ°μ μ μλ°μ€ν¬λ¦½νΈ(2) - DOM μμ μ κ·Ό, μ‘°μ (0) | 2020.01.24 |
---|---|
λΈλΌμ°μ μ μλ°μ€ν¬λ¦½νΈ(1) - λ¬Έμ κ°μ²΄ λͺ¨λΈ DOM (0) | 2020.01.24 |
λΉλκΈ°μ νλ‘κ·Έλλ°(1) - λκΈ°vsλΉλκΈ°, μ½λ°± (0) | 2020.01.14 |
ES6μ μ¬λ³Ό, μ΄ν°λ μ΄ν°μ μ λ€λ μ΄ν° (0) | 2020.01.14 |
mapκ³Ό set (0) | 2020.01.10 |