JavaScript μ κ· ννμ(Regular Expression)
π μ κ· ννμ(Regular Expression)
- μ κ·μμ λ¬Έμμ΄μμ νΉμ λ΄μ©μ μ°Ύκ±°λ λ체, λλ λ°μ·νλ λ° μ¬μ©λλ€.
- μλ₯Ό λ€μ΄ νμκ°μ νλ©΄μμ μ¬μ©μλ‘λΆν° μ λ ₯ λ°λ μ νλ²νΈκ° μ ν¨νμ§ μ²΄ν¬ν νμκ° μλ€. μ΄λ μ κ· ννμμ μ¬μ©νλ©΄ κ°λ¨ν μ²λ¦¬ν μ μλ€.
- λ°λ³΅λ¬Έκ³Ό 쑰건문μ μ¬μ©ν 볡μ‘ν μ½λλ μ κ· ννμμ μ΄μ©νλ©΄ λ§€μ° κ°λ¨νκ² ννν μ μλ€.
- κ·Έλ¬λ μ κ· ννμμ μ£Όμμ΄λ 곡백μ νμ©νμ§ μκ³ , μ¬λ¬κ°μ§ κΈ°νΈλ₯Ό νΌν©νμ¬ μ¬μ©νκΈ° λλ¬Έμ κ°λ μ±μ΄ μ’μ§ μλ€λ λ¬Έμ κ° μλ€.
- μ κ· ννμμ 리ν°λ΄ νκΈ°λ²μΌλ‘ μμ±ν μ μλ€. μ κ· ννμ 리ν°λ΄μ μλμ κ°μ΄ νννλ€.
π μ κ· ννμ νμ© μμ
π‘ μ€λλ§ νΉκ°, μ€μ§μ΄ λ 콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!
- /μ€/: ‘μ€’λ₯Ό νλλ§ μ°Ύλλ€.
- μ€λλ§ νΉκ°, μ€μ§μ΄ λ 콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!
- /μ€/g: ‘μ€’λ₯Ό λͺ¨λ μ°Ύλλ€.
- μ€λλ§ νΉκ°, μ€μ§μ΄ λ 콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!
- g(global) νλκ·Έλ₯Ό λ€μ λΆμλ€.
- /μ€μ§μ΄ λ
콩/: ‘μ€μ§μ΄ λ
콩’μ μ°Ύλλ€.
- μ€λλ§ νΉκ°, μ€μ§μ΄ λ 콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!
- /[μ€m1]/g: ‘μ€’, ‘m’, ‘1’μ λͺ¨λ μ°Ύλλ€.
- μ€λλ§ νΉκ°, μ€μ§μ΄ λ 콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!
- /[0-9]/g: μ«μ 0-9λ₯Ό λͺ¨λ μ°Ύλλ€.
- μ€λλ§ νΉκ°, μ€μ§μ΄ λ 콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!
- /[^0-9]/g: μ«μ 0-9κ° μλ κ²μ λͺ¨λ μ°Ύλλ€.
- μ€λλ§ νΉκ°, μ€μ§μ΄ λ 콩 180g **** 16κ°*** 32***,600μ. μ€μ§ mittmallμμλ§!***
- λκ΄νΈ [] μμμ μμ ^λ₯Ό μ°λ©΄ λΆμ μ κΈ°λ₯μ νλ€.
- [a-zA-Z]g: μμ΄ μνλ²³ λλ¬Έμ, μλ¬Έμλ₯Ό λͺ¨λ μ°Ύλλ€.
- μ€λλ§ νΉκ°, μ€μ§μ΄ λ 콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!
π μ κ· ννμ μμ±
μμ±μ ν¨μ λ°©μ
RegExp μμ±μ ν¨μλ₯Ό νΈμΆνμ¬ μ¬μ©νλ€.
// ννμ
const regexp = new RegExp("^abc");
// ννμ, νλκ·Έ
const regexp2 = new RegExp("^abc", "gi");
리ν°λ΄ λ°©μ
/λ‘ κ°μΈμ§ ν¨ν΄μ 리ν°λ΄λ‘ μ¬μ©νλ€. 보ν΅μ κ²½μ° λ¦¬ν°λ΄ λ°©μμ΄ νΈλ¦¬νλ€.
// ννμ
const regexp = /^abc/;
// ννμ, νλκ·Έ
const regexp2 = /^abc/gi;
π μ κ· ννμ νμ
π‘ /ν¨ν΄/νλκ·Έ
- μ¬λμ / μ¬μ΄μλ 맀μΉμν¬ ν¨ν΄μ μ¨ μ€λ€.
- μ¬λμ / λ€μμλ μ΅μ μ μ€μ νλ νλκ·Έλ₯Ό μ¨ μ€λ€. νλκ·Έλ μ΅μ μ΄λ―λ‘ μ νμ μΌλ‘ μ¬μ©νλ€. νλκ·Έλ₯Ό μ¬μ©νμ§ μμ κ²½μ° λ¬Έμμ΄ λ΄ κ²μ λ§€μΉ λμμ΄ 1κ° μ΄μμ΄λλΌλ 첫 λ²μ§Έ 맀μΉν λμλ§μ κ²μνκ³ μ’ λ£νλ€.
νλκ·Έ
- i (Ignore Case): λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ κ²μνλ€.
- g (Global): λ¬Έμμ΄ λ΄μ λͺ¨λ ν¨ν΄μ κ²μνλ€.
- m (Multi Line): λ¬Έμμ΄μ νμ΄ λ°λλλΌλ κ²μμ κ³μ νλ€.
λ§€μΉ ν¨ν΄(λ¬Έμ, μ«μ, κΈ°νΈ λ±)
- a-zA-Z: μμ΄ μνλ²³μΌλ‘ λ²μ μ§μ
- γ±-γ κ°-ν£: νκΈ λ¬Έμλ‘ λ²μ μ§μ
- 0-9: μ«μλ‘ λ²μ μ§μ
- .: λͺ¨λ λ¬Έμμ΄
- \d: μ«μ
- \D: μ«μκ° μλ κ²
- \w: μμ΄ μνλ²³, μ«μ, μΈλ μ€μ½μ΄(_)
- \W: \wκ° μλ κ²
- \s: space
- \S: spaceκ° μλ κ²
κ²μ ν¨ν΄
μλ ν¨ν΄μ μ΄μ©νλ©΄ AND, OR, StartWith, EndWith λ± λ€μν μ‘°ν©μ λ§λ€ μ μλ€.
- |: OR
- []: κ΄νΈ μ λ¬Έμλ€ μ€ νλ
- [^λ¬Έμ]: κ΄νΈ μμ λ¬Έμλ₯Ό μ μΈν κ²
- ^λ¬Έμμ΄: νΉμ λ¬Έμμ΄λ‘ μμ
- λ¬Έμμ΄$: νΉμ λ¬Έμμ΄λ‘ λλ¨
- (): κ·Έλ£Ή κ²μ λ° λΆλ₯
- (?: ν¨ν΄): κ·Έλ£Ή κ²μ (λΆλ₯ X)
- \b: λ¨μ΄μ μ²μ/λ
- \B: λ¨μ΄μ μ²μ/λμ΄ μλ
μλ ν¨ν΄
νΉμ ν¨ν΄μ΄ λͺ λ² λ°λ³΅λλμ§ νν°λ§ κ°λ₯
- ?: μ΅λ ν λ² (μκ±°λ ν λ²)
- *: μκ±°λ μμ
- +: μ΅μ ν κ°
- {n}: nκ°
- {Min,}: μ΅μ Minκ° μ΄μ
- {Min, Max}: μ΅μ Minκ° μ΄μ, μ΅λ Maxκ° μ΄ν
π μ κ· ννμ μ£Όμ λ©μλ
(“λ¬Έμμ΄”).match(/μ κ·ννμ/νλκ·Έ)
λ¬Έμμ΄μμ μ κ· ννμμ 맀μΉλλ νλͺ©λ€μ λ°°μ΄λ‘ λ°ν
const str = "μ€λλ§ νΉκ°, μ€μ§μ΄ λ
콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!";
console.log(str.match(/[a-zA-Z]/g));
/* [
'g', 'm', 'i',
't', 't', 'm',
'a', 'l', 'l'
] */
(”λ¬Έμμ΄”).replace(/μ κ·ννμ/,”λ체문μμ΄”)
μ κ· ννμμ 맀μΉλλ νλͺ©μ λ체 λ¬Έμμ΄λ‘ λ³ν
const str = "μ€λλ§ νΉκ°, μ€μ§μ΄ λ
콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!";
console.log(str.replace(/μ€μ§μ΄ λ
콩/, "κΌ¬λΆμΉ©"));
// μ€λλ§ νΉκ°, κΌ¬λΆμΉ© 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!
(”λ¬Έμμ΄”).split(μ κ·ννμ)
λ¬Έμμ΄μ μ κ· ννμμΌλ‘ 맀μΉλλ νλͺ©μΌλ‘ μͺΌκ°μ΄ λ°°μ΄λ‘ λ°ν
const str = "μ€λλ§ νΉκ°, μ€μ§μ΄ λ
콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!";
console.log(str.split(/\\s/g));
/* [
'μ€λλ§',
'νΉκ°,',
'μ€μ§μ΄',
'λ
콩',
'180g',
'*',
'16κ°',
'32,600μ.',
'μ€μ§',
'mittmallμμλ§!'
] */
(μ κ·ννμ).test(”λ¬Έμμ΄”)
λ¬Έμμ΄μ΄ μ κ· ννμκ³Ό 맀μΉλλ©΄ true, μλλ©΄ false λ°ν
const str = "μ€λλ§ νΉκ°, μ€μ§μ΄ λ
콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!";
console.log(/^μ΄μ /.test(str)); // false
(μ κ·ννμ).exec(”λ¬Έμμ΄”)
match λ©μλμ μ μ¬ (λ¨, 무쑰건 첫 λ²μ§Έ λ§€μΉ κ²°κ³Όλ§ λ°ν)
const str = "μ€λλ§ νΉκ°, μ€μ§μ΄ λ
콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!";
console.log(/[a-zA-Z]/.exec(str));
/* [
'g',
index: 18,
input: 'μ€λλ§ νΉκ°, μ€μ§μ΄ λ
콩 180g * 16κ° 32,600μ. μ€μ§ mittmallμμλ§!',
groups: undefined
] */
π μ κ· ννμ νμ© μ½λ
- μΉμ¬μ΄νΈ μ£Όμ μ κ· ννμ
- http:// νΉμ https://λ‘ μμνκ³ μνλ²³, μΈλμ€μ½μ΄, νμ΄ν, dotμΌλ‘ μ΄λ£¨μ΄μ Έ μλ€.
const str = "κ°μ€μ mittμ ν°μ€ν 리: <https://trustmitt.tistory.com>"; console.log(str.match(/https?:\\/\\/[\\w\\-\\.]+/g)); // [ '<https://trustmitt.tistory.com>' ]
- /https?:\/\/[\w\-\.]+/g
- http ⇒ λ‘ μμ
- s? ⇒ λ€μ sλ μκ±°λ μλ€.
- : ⇒ λ€μμΌλ‘ :
- \/\/ ⇒ λ€μμΌλ‘ νΉμκΈ°νΈ //
- [\w\-\.]+ ⇒ μλ¬Έμ, μΈλμ€μ½μ΄, νμ΄ν, dotμΌλ‘ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μ΄ ν κ° μ΄μ μλ€.
- νλκ·Έ g ⇒ 맀μΉλλ κ±Έ λͺ¨λ λ°ν
- μ νλ²νΈ μ κ· ννμ
- μ μ λ²νΈλ 02-111-1111, νΈλν°μ 010-1111-1111 νμμ΄λ€. μ«μμ κ°μκ° λ€λ₯΄λ€.
const str = "μ€μ§μ΄ λ 콩 ꡬμ λ¬Έμ: 010-1111-1111 neartheclouds@naver.com"; console.log(str.match(/\\d{2,3}-\\d{3,4}-\\d{4}/g)); // [ '010-1111-1111' ]
- /\d{2,3}-\d{3,4}-\d{4}/g
- \d{2,3} ⇒ μ«μ 2-3κ°λ‘ μμ
- \- ⇒ λ€μ νμ΄ν
- \d{3,4} ⇒ λ€μ μ«μ 3-4κ°
- \- ⇒ λ€μ νμ΄ν
- \d{3,4} ⇒ λ€μ μ«μ 3-4κ°
- νλκ·Έ g ⇒ 맀μΉλλ κ±Έ λͺ¨λ λ°ν
- μ΄λ©μΌ μ£Όμ μ κ· ννμ
const str = "μ€μ§μ΄ λ 콩 ꡬμ λ¬Έμ: 010-1111-1111 neartheclouds@naver.com"; console.log(str.match(/[\\w\\-\\.]+\\@[\\w\\-\\.]+/g)); // [ 'neartheclouds@naver.com' ]
- μμ΄λλ‘ μ¬μ© κ°λ₯νμ§ κ²μ¬
- μλ¬Έμ, μ«μλ§ νμ©, 4~10 μ리
const id = "mainmirror"; console.log(/^[A-Za-z0-9]{4,10}$/.test(id)); // true
- νΉμλ¬Έμ ν¬ν¨ μ¬λΆ κ²μ¬
const str = "m@ainmirror"; // case 1 console.log(/[^A-Za-z0-9]/gi.test(str)); // true // case 2 regexr = /[\\{\\}\\[\\]\\/?.,;:|\\)*~`!^\\-_+<>@\\#$%&\\\\\\=\\(\\'\\"]/gi; console.log(regexr.test(str)); // true // νΉμλ¬Έμ μ κ±° console.log(str.replace(regexr, "")); // mainmirror
π Reference
https://poiemaweb.com/js-regexp
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jeongju02&logNo=221517177533