ν°μ€ν 리 λ·°
[JavaScript] RegExp
κ°λ°κ°κ΅΄πΈ 2022. 8. 3. 15:52μ κ· ννμμ΄λ?
μ κ· ννμ(regular expression)μ μΌμ ν ν¨ν΄μ κ°μ§ λ¬Έμμ΄μ μ§ν©μ νννκΈ° μν΄ μ¬μ©νλ νμ μΈμ΄(formal language)μ λλ€. μ κ· ννμμ μλ°μ€ν¬λ¦½νΈμ κ³ μ λ¬Έλ²μ΄ μλλ©°, λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μ μ½λ μλν°μ λ΄μ₯λμ΄ μμ΅λλ€.
μ κ· ννμμ λ¬Έμμ΄μ λμμΌλ‘ ν¨ν΄ λ§€μΉ κΈ°λ₯μ μ 곡ν©λλ€. ν¨ν΄ λ§€μΉ κΈ°λ₯μ΄λ, νΉμ ν¨ν΄κ³Ό μΌμΉνλ λ¬Έμμ΄μ κ²μνκ±°λ μΆμΆ λλ μΉνν μ μλ κΈ°λ₯μ λ§ν©λλ€.
*μλ°μ€ν¬λ¦½νΈλ νμ μ κ· ννμ λ¬Έλ²μ ES3λΆν° λμ
μλ₯Ό λ€μ΄, νμκ°μ νλ©΄μμ μ¬μ©μλ‘λΆν° μ λ ₯λ°μ ν΄λν° μ νλ²νΈκ° μ ν¨ν λ²νΈμΈμ§ "μ«μ 3κ° + '-' + μ«μ 4κ° + '-' + μ«μ 4κ°" λΌλ μΌμ ν ν¨ν΄μ μ κ· ννμμΌλ‘ μ μνκ³ μ¬μ©μλ‘λΆν° μ λ ₯λ°μ λ¬Έμμ΄μ΄ ν΄λΉ ν¨ν΄μ 맀μΉνλμ§ μ²΄ν¬ν μ μμ΅λλ€.
// μ¬μ©μλ‘λΆν° μ
λ ₯λ°μ ν΄λν° μ νλ²νΈ
const tel = '010-1234-567ν';
// μ κ· ννμ 리ν°λ΄λ‘ ν΄λν° μ νλ²νΈ ν¨ν΄μ μ μνλ€.
const regExp = /^\d{3}-\d{4}-\d{4}$/;
// telμ΄ ν΄λν° μ νλ²νΈ ν¨ν΄μ 맀μΉνλμ§ ν
μ€νΈ(νμΈ)νλ€.
regExp.test(tel); // -> false
μ΄μ²λΌ μ κ·ννμμ μ¬μ©νλ©΄ μλμ κ°μ μ₯λ¨μ μ΄ μμ΅λλ€.
- μ₯μ : λ°λ³΅λ¬Έκ³Ό 쑰건문 μμ΄ ν¨ν΄μ μ μνκ³ ν μ€νΈνλ κ²μΌλ‘ κ°λ¨ν 체ν¬
- λ¨μ : μ κ·ννμμ μ£Όμμ΄λ 곡백μ νμ©νμ§ μκ³ μ¬λ¬ κ°μ§ κΈ°νΈλ₯Ό νΌν©νμ¬ μ¬μ©νκΈ° λλ¬Έμ κ°λ μ±μ΄ μ’μ§ μμ
μ κ· ννμμ μμ±
μ κ· ννμ κ°μ²΄(RegExp κ°μ²΄)λ₯Ό μμ±νκΈ° μν΄μλ μ κ· ννμ 리ν°λ΄κ³Ό RegExp μμ±μ ν¨μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ κ· ννμ 리ν°λ΄
μ κ· ννμ κ°μ²΄λ₯Ό μμ±νλ μΌλ°μ μΈ λ°©λ²μΌλ‘, μ κ· ννμ 리ν°λ΄μ ν¨ν΄κ³Ό νλκ·Έλ‘ κ΅¬μ±λ©λλ€.
const target = 'Is this all there is?';
// ν¨ν΄: is
// νλκ·Έ: i => λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ κ²μνλ€.
const regexp = /is/i;
// test λ©μλλ target λ¬Έμμ΄μ λν΄ μ κ·ννμ regexpμ ν¨ν΄μ κ²μνμ¬ λ§€μΉ κ²°κ³Όλ₯Ό λΆλ¦¬μΈ κ°μΌλ‘ λ°ννλ€.
regexp.test(target); // -> true
RegExp μμ±μ ν¨μ
RegExp μμ±μ ν¨μλ₯Ό μ¬μ©νμ¬ RegExp κ°μ²΄λ₯Ό μμ±ν μ μμ΅λλ€.
new RegExp(pattern[, flags])
- pattern : μ κ· ννμμ ν¨ν΄
- flags : μ κ· ννμμ νλκ·Έ(g, i, m, u, y)
const target = 'Is this all there is?';
const regexp = new RegExp(/is/i); // ES6
// const regexp = new RegExp(/is/, 'i');
// const regexp = new RegExp('is', 'i');
regexp.test(target); // -> true
// λ³μλ₯Ό μ¬μ©ν΄ λμ μΌλ‘ RegExpκ°μ²΄ μμ±
const count = (str, char) => (str.match(new RegExp(char, 'gi')) ?? []).length;
count('Is this all there is?', 'is'); // -> 3
count('Is this all there is?', 'xx'); // -> 0
- RegExp μμ±μ ν¨μλ₯Ό μ¬μ©νλ©΄ λ³μλ₯Ό μ¬μ©ν΄ λμ μΌλ‘ RegExp κ°μ²΄λ₯Ό μμ±ν μ μμ
RegExp λ©μλ
μ κ·ννμμ μ¬μ©νλ λ©μλλ RegExp.prototype.exec, RegExp.prototype.test, String.prototype.match, String.prototype.replace, String.prototype.search, String.prototype.split λ±μ΄ μμ΅λλ€.
RegExp.prototype.exec
exec λ©μλλ μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄μ λν΄ μ κ· ννμμ ν¨ν΄μ κ²μνμ¬ λ§€μΉ κ²°κ³Όλ₯Ό λ°°μ΄λ‘ λ°ννκ³ λ§€μΉ κ²°κ³Όκ° μλ κ²½μ° nullμ λ°νν©λλ€.
const target = 'Is this all there is?';
const regExp = /is/;
regExp.exec(target); // -> ["is", index: 5, input: "Is this all there is?", groups: undefined]
- λ¬Έμμ΄ λ΄μ λͺ¨λ ν¨ν΄μ κ²μνλ gνλκ·Έλ₯Ό μ§μ ν΄λ 첫 λ²μ§Έ λ§€μΉ κ²°κ³Όλ§ λ°ννλ κ²μ μ£Όμν΄μΌ ν¨
RegExp.prototype.test
test λ©μλλ μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄μ λν΄ μ κ· ννμμ ν¨ν΄μ κ²μνμ¬ λ§€μΉ κ²°κ³Όλ₯Ό λΆλ¦¬μΈ κ°μΌλ‘ λ°νν©λλ€.
const target = 'Is this all there is?';
const regExp = /is/;
regExp.test(target); // -> true
String.prototype.match
String νμ€ λΉνΈμΈ κ°μ²΄κ° μ 곡νλ match λ©μλλ λμ λ¬Έμμ΄κ³Ό μΈμλ‘ μ λ¬λ°μ μ κ· ννμκ³Όμ λ§€μΉ κ²°κ³Όλ₯Ό λ°°μ΄λ‘ λ°νν©λλ€.
const target = 'Is this all there is?';
const regExp = /is/;
target.match(regExp); // -> ["is", index: 5, input: "Is this all there is?", groups: undefined]
// g νλκ·Έ μ§μ
const target = 'Is this all there is?';
const regExp = /is/g;
target.match(regExp); // -> ["is", "is"]
- test λ©μλμ λ¬λ¦¬ λ¬Έμμ΄ λ΄μ λͺ¨λ ν¨ν΄μ κ²μνλ gνλκ·Έκ° μ§μ λλ©΄ λͺ¨λ λ§€μΉ κ²°κ³Όλ₯Ό λ°ν
νλκ·Έ
ν¨ν΄κ³Ό ν¨κ» μ κ· ννμμ ꡬμ±νλ νλκ·Έλ μ κ· ννμμ κ²μ λ°©μμ μ€μ νκΈ° μν΄ μ¬μ©νλ κ²μΌλ‘ μ΄ 6κ°μ νλκ·Έκ° μ‘΄μ¬ν©λλ€. κ·Έμ€ μ€μν 3κ°μ νλκ·Έλ i, g, mμ λλ€.
νλκ·Έ | μλ―Έ | μ€λͺ |
i | Ignore case | λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ ν¨ν΄μ κ²μ |
g | Global | λμ λ¬Έμμ΄ λ΄μμ ν¨ν΄κ³Ό μΌμΉνλ λͺ¨λ λ¬Έμμ΄μ μ μ κ²μ |
m | Multi line | λ¬Έμμ΄μ νμ΄ λ°λλλΌλ ν¨ν΄ κ²μμ κ³μν¨ |
s | dotAll | .μ΄ κ°ν λ¬Έμ \nλ ν¬ν¨νλλ‘ 'dotall' λͺ¨λλ₯Ό νμ±ν |
u | Unicode | μ λμ½λ; ν¨ν΄μ μ λμ½λ μ½λ ν¬μΈνΈμ λμ΄λ‘ μ·¨κΈ |
y | Sticky | λμ λ¬Έμμ΄μ νμ¬ μμΉλΆν° λΉκ΅λ₯Ό μμνλλ‘ μ€μ νλ 'sticky' λͺ¨λλ₯Ό νμ±ν |
const target = 'Is this all there is?';
// target λ¬Έμμ΄μμ is λ¬Έμμ΄μ λμλ¬Έμλ₯Ό ꡬλ³νμ¬ ν λ²λ§ κ²μνλ€.
target.match(/is/);
// -> ["is", index: 5, input: "Is this all there is?", groups: undefined]
// target λ¬Έμμ΄μμ is λ¬Έμμ΄μ λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ ν λ²λ§ κ²μνλ€.
target.match(/is/i);
// -> ["Is", index: 0, input: "Is this all there is?", groups: undefined]
// target λ¬Έμμ΄μμ is λ¬Έμμ΄μ λμλ¬Έμλ₯Ό ꡬλ³νμ¬ μ μ κ²μνλ€.
target.match(/is/g);
// -> ["is", "is"]
// target λ¬Έμμ΄μμ is λ¬Έμμ΄μ λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ μ μ κ²μνλ€.
target.match(/is/ig);
// -> ["Is", "is", "is"]
- νλκ·Έλ μ΅μ μ΄λ―λ‘ μ νμ μΌλ‘ μ¬μ©ν μ μμ
- μμμ μκ΄μμ΄ νλ μ΄μμ νλκ·Έλ₯Ό λμμ μ€μ ν μ μμ
- νλκ·Έλ₯Ό μ¬μ©νμ§ μμ κ²½μ° λμλ¬Έμλ₯Ό ꡬλ³ν΄μ ν¨ν΄μ κ²μνκ³ λ¬Έμμ΄μ ν¨ν΄ κ²μ λ§€μΉ λμμ΄ 1κ° μ΄μ μ‘΄μ¬ν΄λ 첫 λ²μ§Έ 맀μΉν λμλ§ κ²μνκ³ μ’ λ£
ν¨ν΄
μ κ· ννμμ ν¨ν΄κ³Ό νλκ·Έλ‘ κ΅¬μ±λλλ° μ΄μ€ ν¨ν΄μ λ¬Έμμ΄μ μΌμ ν κ·μΉμ νννκΈ° μν΄ μ¬μ©ν©λλ€.
- ν¨ν΄μ /λ‘ μ΄κ³ λ«μΌλ©° λ¬Έμμ΄μ λ°μ΄νλ μλ΅ (λ°μ΄νλ₯Ό ν¬ν¨νλ©΄ λ°μ΄νκΉμ§λ ν¨ν΄μ ν¬ν¨λμ΄ κ²μ)
- ν¨ν΄μ νΉλ³ν μλ―Έλ₯Ό κ°μ§λ λ©νλ¬Έμ λλ κΈ°νΈλ‘ ννν μ μμ
- μ΄λ€ λ¬Έμμ΄ λ΄μ ν¨ν΄κ³Ό μΌμΉνλ λ¬Έμμ΄μ΄ μ‘΄μ¬ν λ 'μ κ· ννμκ³Ό 맀μΉνλ€'λΌκ³ ννν¨
ν¨ν΄μ νννλ λͺ κ°μ§ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€.
λ¬Έμμ΄ κ²μ
μ κ· ννμμ ν¨ν΄μ λ¬Έμ λλ λ¬Έμμ΄μ μ§μ νλ©΄ κ²μ λμ λ¬Έμμ΄μμ ν¨ν΄μΌλ‘ μ§μ ν λ¬Έμ λλ λ¬Έμμ΄μ κ²μν©λλ€. RegExp λ©μλλ₯Ό μ¬μ©νμ¬ κ²μ λμ λ¬Έμμ΄κ³Ό μ κ· ννμμ λ§€μΉ κ²°κ³Όλ₯Ό ꡬνλ©΄ κ²μμ΄ μνλ©λλ€.
// 1. νλκ·Έλ₯Ό μλ΅
const target = 'Is this all there is?';
// 'is' λ¬Έμμ΄κ³Ό 맀μΉνλ ν¨ν΄. νλκ·Έκ° μλ΅λμμΌλ―λ‘ λμλ¬Έμλ₯Ό ꡬλ³νλ€.
const regExp = /is/;
// targetκ³Ό μ κ· ννμμ΄ λ§€μΉνλμ§ ν
μ€νΈνλ€.
regExp.test(target); // -> true
// targetκ³Ό μ κ· ννμμ λ§€μΉ κ²°κ³Όλ₯Ό ꡬνλ€.
target.match(regExp);
// -> ["is", index: 5, input: "Is this all there is?", groups: undefined]
// 2. λμλ¬Έμ ꡬλ³X
const target = 'Is this all there is?';
// 'is' λ¬Έμμ΄κ³Ό 맀μΉνλ ν¨ν΄. νλκ·Έ iλ₯Ό μΆκ°νλ©΄ λμλ¬Έμλ₯Ό ꡬλ³νμ§ μλλ€.
const regExp = /is/i;
target.match(regExp);
// -> ["Is", index: 0, input: "Is this all there is?", groups: undefined]
// 3. μ μ κ²μ
const target = 'Is this all there is?';
// 'is' λ¬Έμμ΄κ³Ό 맀μΉνλ ν¨ν΄.
// νλκ·Έ gλ₯Ό μΆκ°νλ©΄ λμ λ¬Έμμ΄ λ΄μμ ν¨ν΄κ³Ό μΌμΉνλ λͺ¨λ λ¬Έμμ΄μ μ μ κ²μνλ€.
const regExp = /is/ig;
target.match(regExp); // -> ["Is", "is", "is"]
- νλκ·Έλ₯Ό μλ΅νλ©΄ λμλ¬Έμλ₯Ό ꡬλ³νμ¬ μ κ· ννμκ³Ό 맀μΉν 첫 λ²μ§Έ κ²°κ³Όλ§ λ°ν
- νλκ·Έ iλ₯Ό μ¬μ©νλ©΄ λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ κ²μ
- νλκ·Έ gλ₯Ό μ¬μ©νλ©΄ ν¨ν΄κ³Ό 맀μΉνλ λͺ¨λ λ¬Έμμ΄μ μ μ κ²μ
μμμ λ¬Έμμ΄ κ²μ
.μ μμμ λ¬Έμ ν κ°λ₯Ό μλ―Έν©λλ€. μ΄λ λ¬Έμμ λ΄μ©μ 무μμ΄λ μκ΄μ΄ μμ΅λλ€.
const target = 'Is this all there is?';
// μμμ 3μ리 λ¬Έμμ΄μ λμλ¬Έμλ₯Ό ꡬλ³νμ¬ μ μ κ²μνλ€.
const regExp = /.../g;
target.match(regExp); // -> ["Is ", "thi", "s a", "ll ", "the", "re ", "is?"]
λ°λ³΅ κ²μ
{m,n}μ μμ ν¨ν΄μ΄ μ΅μ mλ², μ΅λ nλ² λ°λ³΅λλ λ¬Έμμ΄μ μλ―Έν©λλ€. μ½€λ§ λ€μ κ³΅λ°±μ΄ μμΌλ©΄ μ μ λμνμ§ μμΌλ―λ‘ μ£Όμν΄μΌ ν©λλ€.
// 1. {m,n}
const target = 'A AA B BB Aa Bb AAA';
// 'A'κ° μ΅μ 1λ², μ΅λ 2λ² λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
const regExp = /A{1,2}/g;
target.match(regExp); // -> ["A", "AA", "A", "AA", "A"]
// 2. {n}
const target = 'A AA B BB Aa Bb AAA';
// 'A'κ° 2λ² λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
const regExp = /A{2}/g;
target.match(regExp); // -> ["AA", "AA"]
// 3. {n,}
const target = 'A AA B BB Aa Bb AAA';
// 'A'κ° μ΅μ 2λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
const regExp = /A{2,}/g;
target.match(regExp); // -> ["AA", "AAA"]
// 4. +
const target = 'A AA B BB Aa Bb AAA';
// 'A'κ° μ΅μ ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄('A, 'AA', 'AAA', ...)μ μ μ κ²μνλ€.
const regExp = /A+/g;
target.match(regExp); // -> ["A", "AA", "A", "AAA"]
// 5. ?
const target = 'color colour';
// 'colo' λ€μ 'u'κ° μ΅λ ν λ²(0λ² ν¬ν¨) μ΄μ λ°λ³΅λκ³ 'r'μ΄ μ΄μ΄μ§λ λ¬Έμμ΄ 'color', 'colour'λ₯Ό μ μ κ²μνλ€.
const regExp = /colou?r/g;
target.match(regExp); // -> ["color", "colour"]
- {m,n}μ μμ ν¨ν΄μ΄ μ΅μ mλ², μ΅λ nλ² λ°λ³΅λλ λ¬Έμμ΄
- {n}μ μμ ν¨ν΄μ΄ nλ² λ°λ³΅λλ λ¬Έμμ΄λ‘ {n,n}μ κ°μ
- {n,}μ μμ ν¨ν΄μ΄ μ΅μ nλ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄
- +λ μμ ν¨ν΄μ΄ μ΅μ νλ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄λ‘ {1,}μ κ°μ
- ?λ μμ ν¨ν΄μ΄ μ΅λ νλ²(0λ² ν¬ν¨) μ΄μ λ°λ³΅λλ λ¬Έμμ΄λ‘ {0,1}μ κ°μ
OR κ²μ
|μ orμ μλ―Έλ₯Ό κ°μ§λλ€.
// 1. /A|B/
const target = 'A AA B BB Aa Bb';
// 'A' λλ 'B'λ₯Ό μ μ κ²μνλ€.
const regExp = /A|B/g;
target.match(regExp); // -> ["A", "A", "A", "B", "B", "B", "A", "B"]
// 2. λΆν΄λμ§ μλ λ¨μ΄ λ 벨
const target = 'A AA B BB Aa Bb';
// 'A' λλ 'B'κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
// 'A', 'AA', 'AAA', ... λλ 'B', 'BB', 'BBB', ...
const regExp = /A+|B+/g;
target.match(regExp); // -> ["A", "AA", "B", "BB", "A", "B"]
// 3. [] λ΄μ λ¬Έμλ orλ‘ λμ
const target = 'A AA B BB Aa Bb';
// 'A' λλ 'B'κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
// 'A', 'AA', 'AAA', ... λλ 'B', 'BB', 'BBB', ...
const regExp = /[AB]+/g;
target.match(regExp); // -> ["A", "AA", "B", "BB", "A", "B"]
// 4. []μμ -λ₯Ό ν΅ν΄ λ²μ μ§μ
const target = 'A AA BB ZZ Aa Bb';
// 'A' ~ 'Z'κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
// 'A', 'AA', 'AAA', ... λλ 'B', 'BB', 'BBB', ... ~ λλ 'Z', 'ZZ', 'ZZZ', ...
const regExp = /[A-Z]+/g;
target.match(regExp); // -> ["A", "AA", "BB", "ZZ", "A", "B"]
// 5. λμλ¬Έμ ꡬλ³νμ§ μκ³ λ²μ κ²μ
const target = 'AA BB Aa Bb 12';
// 'A' ~ 'Z' λλ 'a' ~ 'z'κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
const regExp = /[A-Za-z]+/g;
target.match(regExp); // -> ["AA", "BB", "Aa", "Bb"]
// 6. μ«μλ₯Ό κ²μ
const target = 'AA BB 12,345';
// '0' ~ '9'κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
const regExp = /[0-9]+/g;
target.match(regExp); // -> ["12", "345"]
const target = 'AA BB 12,345';
// '0' ~ '9' λλ ','κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
const regExp = /[0-9,]+/g;
target.match(regExp); // -> ["12,345"]
// 7. \dλ μ«μλ₯Ό μλ―Έ, \Dλ μ«μκ° μλ λ¬Έμλ₯Ό μλ―Έ
const target = 'AA BB 12,345';
// '0' ~ '9' λλ ','κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
let regExp = /[\d,]+/g;
target.match(regExp); // -> ["12,345"]
// '0' ~ '9'κ° μλ λ¬Έμ(μ«μκ° μλ λ¬Έμ) λλ ','κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
regExp = /[\D,]+/g;
target.match(regExp); // -> ["AA BB ", ","]
// 8. \wλ μνλ²³, μ«μ, μΈλμ€μ½μ΄λ₯Ό μλ―Έ
const target = 'Aa Bb 12,345 _$%&';
// μνλ²³, μ«μ, μΈλμ€μ½μ΄, ','κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
let regExp = /[\w,]+/g;
target.match(regExp); // -> ["Aa", "Bb", "12,345", "_"]
// μνλ²³, μ«μ, μΈλμ€μ½μ΄κ° μλ λ¬Έμ λλ ','κ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μ μ κ²μνλ€.
regExp = /[\W,]+/g;
target.match(regExp); // -> [" ", " ", ",", " $%&"]
- /A|B/λ 'A' λλ 'B'λ₯Ό λΆν΄λ λ¨μ΄ λ 벨 μνλ‘ κ²μ
- +λ₯Ό μ¬μ©νλ©΄ μμ ν¨ν΄μ ν λ² μ΄μ λ°λ³΅νλ λ¬Έμμ΄μ κ²μνκΈ° λλ¬Έμ λΆν΄λμ§ μμ λ¨μ΄ λ λ²¨λ‘ κ²μ
- [] λ΄μ λ¬Έμλ orλ‘ λμ
- [] λ΄μ -λ₯Ό μ¬μ©νλ©΄ λ²μλ₯Ό μ§μ ν μ μμ
- [\d]λ μ«μλ₯Ό μλ―ΈνκΈ° λλ¬Έμ [0-9]μ κ°μ
- [\D]λ μ«μκ° μλ λ¬Έμλ₯Ό μλ―Έ
- [\w]λ μνλ²³, μ«μ, μΈλμ€μ½μ΄λ₯Ό μλ―ΈνκΈ° λλ¬Έμ [A-Za-z0-9_]μ κ°μ
- [\W]λ μνλ²³, μ«μ, μΈλμ€μ½μ΄κ° μλ λ¬Έμλ₯Ό μλ―Έ
NOT κ²μ
[...] λ΄μ ^λ notμ μλ―Έλ₯Ό κ°μ§λλ€.
const target = 'AA BB 12 Aa Bb';
// μ«μλ₯Ό μ μΈν λ¬Έμμ΄μ μ μ κ²μνλ€.
const regExp = /[^0-9]+/g;
target.match(regExp); // -> ["AA BB ", " Aa Bb"]
μμ μμΉλ‘ κ²μ
[...] λ°μ ^λ λ¬Έμμ΄μ μμμ μλ―Έν©λλ€. λ¨, [...] λ΄μ ^λ notμ μλ―Έλ₯Ό κ°μ§κΈ° λλ¬Έμ μ£Όμν΄μΌ ν©λλ€.
const target = 'https://poiemaweb.com';
// 'https'λ‘ μμνλμ§ κ²μ¬νλ€.
const regExp = /^https/;
regExp.test(target); // -> true
λ§μ§λ§ μμΉλ‘ κ²μ
$λ λ¬Έμμ΄μ λ§μ§λ§μ μλ―Έν©λλ€.
const target = 'https://poiemaweb.com';
// 'com'μΌλ‘ λλλμ§ κ²μ¬νλ€.
const regExp = /com$/;
regExp.test(target); // -> true
μμ£Ό μ¬μ©νλ μ κ·ννμ
νΉμ λ¨μ΄λ‘ μμνλμ§ κ²μ¬
const url = 'https://example.com';
// 'http://' λλ 'https://'λ‘ μμνλμ§ κ²μ¬νλ€.
/^https?:\/\//.test(url); // -> true
/^(http|https):\/\//.test(url); // -> true
- [ ... ] λ°κΉ₯μ ^λ λ¬Έμμ΄μ μμμ μλ―Έ
- ?μ μμ ν¨ν΄μ΄ μ΅λ ν λ²(0λ² ν¬ν¨) μ΄μ λ°λ³΅λλμ§λ₯Ό μλ―Έ
νΉμ λ¨μ΄λ‘ λλλμ§ κ²μ¬
const fileName = 'index.html';
// 'html'λ‘ λλλμ§ κ²μ¬νλ€.
- $λ λ¬Έμμ΄μ λ§μ§λ§μ μλ―Έ
μ«μλ‘λ§ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μΈμ§ κ²μ¬
const target = '12345';
// μ«μλ‘λ§ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μΈμ§ κ²μ¬νλ€.
/^\d+$/.test(target); // -> true
- [ ... ] λ°κΉ₯μ ^μ λ¬Έμμ΄μ μμμ, $λ λ¬Έμμ΄μ λ§μ§λ§μ μλ―Έ
- \dλ μ«μλ₯Ό μλ―Ένκ³ +λ μμ ν¨ν΄μ΄ μ΅μ ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μλ―Έ
νλ μ΄μμ 곡백μΌλ‘ μμνλμ§ κ²μ¬
const target = ' Hi!';
// νλ μ΄μμ 곡백μΌλ‘ μμνλμ§ κ²μ¬νλ€.
/^[\s]+/.test(target); // -> true
- \sλ μ¬λ¬ κ°μ§ 곡백 λ¬Έμ(μ€νμ΄μ€, ν λ±)μ μλ―Ένλ©° [\t\r\n\v\f]μ κ°μ μλ―Έ
μμ΄λλ‘ μ¬μ© κ°λ₯νμ§ κ²μ¬
const id = 'abc123';
// μνλ²³ λμλ¬Έμ λλ μ«μλ‘ μμνκ³ λλλ©° 4 ~ 10μ리μΈμ§ κ²μ¬νλ€.
/^[A-Za-z0-9]{4,10}$/.test(id); // -> true
- κ²μ λμ λ¬Έμμ΄μ΄ μνλ²³ λμλ¬Έμ λλ μ«μλ‘ μμνκ³ λλλ©° 4~10μ리μΈμ§ κ²μ¬
λ©μΌ μ£Όμ νμμ λ§λμ§ κ²μ¬
const email = 'ungmo2@gmail.com';
/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/.test(email); // -> true
// μΈν°λ· λ©μμ§ νμ κ·μ½
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
- λ§μ½ μΈν°λ· λ©μμ§ νμ κ·μ½μΈ RFC 5322μ λ§λ μ κ΅ν ν¨ν΄ 맀μΉμ΄ νμνλ€λ©΄ 볡μ‘ν ν¨ν΄μ μ¬μ©ν΄μΌν¨
νΈλν° λ²νΈ νμμ λ§λμ§ κ²μ¬
const cellphone = '010-1234-5678';
/^\d{3}-\d{3,4}-\d{4}$/.test(cellphone); // -> true
νΉμ λ¬Έμ ν¬ν¨ μ¬λΆ κ²μ¬
// 1. νΉμ λ¬Έμ ν¬ν¨ νμΈ
const target = 'abc#123';
// A-Za-z0-9 μ΄μΈμ λ¬Έμκ° μλμ§ κ²μ¬νλ€.
(/[^A-Za-z0-9]/gi).test(target); // -> true
// 2. νΉμ λ¬Έμλ₯Ό μ νμ μΌλ‘ κ²μ¬
(/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/gi).test(target); // -> true
// 3. νΉμ λ¬Έμλ₯Ό μ κ±°
target.replace(/[^A-Za-z0-9]/gi, ''); // -> abc123
[μΆμ²] λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive: μλ°μ€ν¬λ¦½νΈμ κΈ°λ³Έ κ°λ κ³Ό λμ μ리
269κ°μ κ·Έλ¦Όκ³Ό μ리λ₯Ό νν€μΉλ μ€λͺ μΌλ‘ ‘μλ°μ€ν¬λ¦½νΈμ κΈ°λ³Έ κ°λ κ³Ό λμ μ리’λ₯Ό μ΄ν΄νμ! μΉνμ΄μ§μ λ¨μν 보쑰 κΈ°λ₯μ μ²λ¦¬νκΈ° μν μ νμ μΈ μ©λλ‘ νμ΄λ μλ°μ€ν¬λ¦½νΈλ κ³Όλ
wikibook.co.kr
'JavaScript > λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] 7λ²μ§Έ λ°μ΄ν° νμ Symbol (0) | 2022.08.05 |
---|---|
[JavaScript] String (0) | 2022.08.03 |
[JavaScript] Date (0) | 2022.08.02 |
[JavaScript] Math (0) | 2022.08.02 |
[JavaScript] Number (0) | 2022.08.02 |
- Total
- Today
- Yesterday
- http
- νλ‘ν μ½
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
- μλ°μ€ν¬λ¦½νΈ
- μΉ΄μΉ΄μ€ μΈν΄
- ν¨μν νλ‘κ·Έλλ°
- 2019 μΉ΄μΉ΄μ€ κ°λ°μ κ²¨μΈ μΈν΄
- μκ³ λ¦¬μ¦
- Baekjoon
- μ½λ©ν μ€νΈ
- λ μ컬 νκ²½
- λ°±μ€ javascript
- λ°±μ€
- μ΄μ체μ
- νλ‘κ·Έλλ¨Έμ€
- λ°±μ€ node.js
- fp
- λ€νΈμν¬
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°
- μ΄λΆνμ
- TDD
- νλ‘νΌν°
- map
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ deep dive
- ν¬ν¬μΈν°
- git
- λμμΈ ν¨ν΄
- μλ°
- JavaScript
- μ μ λ³μ
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |