μ κ·ννμ 1νΈμμλ MDNμμ μ€λͺ νλ μ κ·ννμμ λν΄ μμ보μλ€.
2νΈμμλ μ€μ μ¬μ© λ°©λ² λ° νμ©λ²μ λν΄ μ λ¦¬ν΄ λ³΄λ €κ³ νλ€.
μ κ·ννμμ μΌμ ν ν¨ν΄μ κ°μ§ λ¬Έμμ΄μ μ§ν©μ νννκΈ° μν΄ μ¬μ©νλ νμ μΈμ΄λ‘ μλ°μ€ν¬λ¦½νΈμ κ³ μ λ¬Έλ²μ΄ μλλ©°, λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μ μ½λ μλν°μ λ΄μ₯λμ΄ μλ€.
* μλ°μ€ν¬λ¦½νΈλ ν(Perl)μ μ κ· ννμ λ¬Έλ²μ ES3λΆν° λμ νλ€.
μ κ· ννμμ μμ±ν λλ μ κ·ννμ 리ν°λ΄κ³Ό RegExp μμ±μ ν¨μλ₯Ό μ΄μ©ν μ μλλ°, μΌλ°μ μΌλ‘λ μ κ· ννμ 리ν°λ΄μ μ¬μ©νλ€.
μ κ· ννμ 리ν°λ΄μ μλμ κ°μ΄ νννλ€.
/pattern/i
/ : μμκΈ°νΈ
pattern : ν¨ν΄
/ : μ’ λ£ κΈ°νΈ
i : νλκ·Έ(flag)
μμ
const text = 'Hi, My name is...';
// ν¨ν΄: is
// νλκ·Έ: i => λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ κ²μνλ€.
const regexp = /is/i;
regexp.test(text); // true
νλκ·Έ
ν¨ν΄κ³Ό ν¨κ» μ κ· ννμμ ꡬμ±νλ νλκ·Έλ μ κ· ννμμ κ²μ λ°©μμ μ€μ νκΈ° μν΄ μ¬μ©νλ€.
νλκ·Έ | μλ―Έ | μ€λͺ |
i | Ignore case | λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ ν¨ν΄μ κ²μνλ€. |
g | Global | λμ λ¬Έμμ΄ λ΄μμ ν¨ν΄κ³Ό μΌμΉνλ λͺ¨λ λ¬Έμμ΄μ μ μμΌλ‘ νμνλ€. |
m | Multi line | λ¬Έμμ΄μ νμ΄ λ°λλλΌλ ν¨ν΄ κ²μμ κ³μνλ€. |
d | Has Indices | λΆλΆ λ¬Έμμ΄ μΌμΉμ λν΄ μΈλ±μ€λ₯Ό μμ±. |
s | Dot All | κ°ν λ¬Έμκ° .κ³Ό μΌμΉνλ€. (.μ΄ μ€ λ°κΏμ μΌμΉνλμ§ μ¬λΆλ₯Ό λνλΈλ€.) |
u | Unicode | ν¨ν΄μ μ λμ½λ μ½λ ν¬μΈνΈμ μνμ€λ‘ κ°μ£Όνλ€. |
y | Sticky | μ μ°© νμ. λμ λ¬Έμμ΄μ νμ¬ μμΉμμ νμμ μμνλ€. (κ²μμ΄ μ μ°© λμ΄μλμ§ λνλΈλ€.) |
// μ νλ²νΈ νμμ λ§λ μ κ· ννμ μμ±
// xxx-xxxx-xxxx (μ«μ)
const form = document.querySelector('#form')
const input = document.querySelector('#phone')
const output = document.querySelector('#output')
const re = /^(?:\d{3}|\(\d{3}\))([-\/\.])\d{4}\1\d{4}$/
function testInfo(phoneInput) {
const ok = re.exec(phoneInput.value)
if (!ok) {
output.textContent = `νμμ λ§μ§ μλ μ νλ²νΈμ
λλ€. (${phoneInput.value})`
} else {
output.textContent = `κ°μ¬ν©λλ€. μ νλ²νΈλ ${ok[0]} μ
λλ€.`
}
}
form.addEventListener('submit', (event) => {
event.preventDefault()
testInfo(input)
})
μ°Έκ³ )
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive - μ΄μ λͺ¨ (μν€λΆμ€)