π JavaScript μ κ· ννμ λ¬Έλ² μ΄μ 리 + μμ© μμ
μ κ· ννμ(Regular Expression)
μ κ·μ(Regular Expression)μ λ¬Έμμ΄μμ νΉμ λ΄μ©μ μ°Ύκ±°λ λ체 λλ λ°μ·νλλ° μ¬μ©λλ€.
λνμ μΌλ‘ μ λ ₯μΉΈμ μ νλ²νΈλ μ΄λ©μΌμ μ λ ₯νλΌκ³ νμλ μ³μ§ μμ κ°μ μ λ ₯νλ©΄ μ κ·ννμμ μν΄ νν°λ§λμ΄ κ±Έλ¬μ Έ κ²½κ³ μ°½μ λμ°λ νλ©΄μ λ³Έμ μ΄ μμ κ²μ΄λ€.
μ΄μ²λΌ λ°λ³΅λ¬Έκ³Ό 쑰건문μ μ¬μ©ν΄μΌ ν κ²κ°μ 볡μ‘ν μ½λλ μ κ·ννμμ μ΄μ©νλ©΄ λ§€μ° κ°λ¨νκ² ννν μ μμΌλ©° μ£Όλ‘ λ€μκ³Ό κ°μ μν©μμ κ΅μ₯ν μ μ©νκ² μ¬μ©λλ€.
- κ°κ° λ€λ₯Έ ν¬λ§·μΌλ‘ μ μ₯λ μμ²λκ² λ§μ μ νλ²νΈ λ°μ΄ν°λ₯Ό μΆμΆν΄μΌ ν λ
- μ¬μ©μκ° μ λ ₯ν μ΄λ©μΌ, ν΄λν° λ²νΈ, IP μ£Όμ λ±μ΄ μ¬λ°λ₯Έμ§ κ²μ¦νκ³ μΆμ λ
- μ½λμμ νΉμ λ³μμ μ΄λ¦μ μΉννκ³ μΆμ§λ§, ν΄λΉ λ³μμ μ΄λ¦μ ν¬ν¨νκ³ μλ ν¨μλ μ μΈνκ³ μΆμ λ
- νΉμ 쑰건과 μμΉμ λ°λΌμ λ¬Έμμ΄μ ν¬ν¨λ 곡백μ΄λ νΉμλ¬Έμλ₯Ό μ κ±°νκ³ μΆμ λ
// νμκ°μ
ν λ ν΄λν°λ²νΈ μμ κ²μ¬
// μλ₯Ό λ€μ΄ 010-1111-2222 λΌλ μ νΈλ²νΈλ
// "μ«μ3κ°", "-", "μ«μ4κ°", "-", "μ«μ4κ°" λ‘ μ΄λ£¨μ΄μ Έ μλλ°,
const regex = /\d{3}-\d{4}-\d{4}/;
// (\dλ μ«μλ₯Ό μλ―Ένκ³ , {} μμ μ«μλ κ°―μλ₯Ό μλ―Ένλ€.)
regex.test('010-1111-2222') // true;
regex.test('01-11-22') // false;
κ·Έλ¬λ μ κ·ννμμ μ£Όμμ΄λ 곡백μ νμ©νμ§ μκ³ μ¬λ¬κ°μ§ κΈ°νΈλ₯Ό νΌν©νμ¬ μ¬μ©νκΈ° λλ¬Έμ κ°λ μ±μ΄ μ’μ§ μλ€λ λ¬Έμ κ° μλ€λ λ¨μ μ΄ μλ€.
μ κ·μ ꡬμ±
μ κ·μ κ΅¬μ± μ½λλ λ€μκ³Ό κ°λ€.
μ¬λμ¬ λ¬Έμ λκ° μ¬μ΄λ‘ μ κ·μ κΈ°νΈκ° λ€μ΄κ°λ ννμ΄λ€. λ€μ i λ μ κ·μ νλκ·Έμ΄λ€.
// 리ν°λ΄ λ°©μ
const regex = /abc/;
// μμ±μ λ°©μ
const regex = new RegExp("abc");
const regex = new RegExp(/abc/); // μ΄λ κ² ν΄λ λ¨
μλ μμ λ μλ°μ€ν¬λ¦½νΈ μ½λμ§λ§ λλΆλΆμ μΈμ΄μ μ κ·μ λ¬Έλ²μ λΉμ·νλ, νλμ μΈμ΄μ μ κ·μμ μ μ΅νλλ©΄ λ€λ₯Έ μΈμ΄μ μ κ·μμ μ΅νλλ° μμ£Ό λΉ λ₯΄κ² νμ΅μ΄ κ°λ₯νλ€.
μ κ·μ λ©μλ
μμ μ κ·ννμμ κ°μ§κ³ μ΄λ©μΌμ΄λ μ νλ²νΈ λ§€μΉ νν°λ§μ νκΈ°μν΄μ μλ°μ€ν¬λ¦½νΈ μ κ·μ λ©μλλ₯Ό μ΄μ©νμ¬ ν¨ν΄μ κ²μ¬νκ³ , 맀μΉλλ λ¬Έμμ΄μ μΆμΆ, λ³ννλ€.
λ©μλ | μλ―Έ |
("λ¬Έμμ΄").match(/μ κ·ννμ/νλκ·Έ) | "λ¬Έμμ΄"μμ "μ κ·ννμ"μ 맀μΉλλ νλͺ©λ€μ λ°°μ΄λ‘ λ°ν |
("λ¬Έμμ΄").replace(/μ κ·ννμ/, "λ체문μμ΄") | "μ κ·ννμ"μ 맀μΉλλ νλͺ©μ "λ체문μμ΄"λ‘ λ³ν |
("λ¬Έμμ΄").split(μ κ·ννμ) | "λ¬Έμμ΄"μ "μ κ·ννμ"μ 맀μΉλλ νλͺ©μΌλ‘ μͺΌκ°μ΄ λ°°μ΄λ‘ λ°ν |
(μ κ·ννμ).test("λ¬Έμμ΄") | "λ¬Έμμ΄"μ΄ "μ κ·ννμ"κ³Ό 맀μΉλλ©΄ true, μλλ©΄ falseλ°ν |
(μ κ·ννμ).exec("λ¬Έμμ΄") | matchλ©μλμ μ μ¬(λ¨, 무쑰건 첫λ²μ§Έ λ§€μΉ κ²°κ³Όλ§ λ°ν) |
// μ κ·ννμμ λ΄μ λ³μ
const regex = /apple/; // apple μ΄λΌλ λ¨μ΄κ° μλμ§ νν°λ§
// "λ¬Έμμ΄"μ΄ "μ κ·ννμ"κ³Ό 맀μΉλλ©΄ true, μλλ©΄ falseλ°ν
regex.test("Hello banana and apple hahahaha"); // true
// "λ¬Έμμ΄"μμ "μ κ·ννμ"μ 맀μΉλλ νλͺ©λ€μ λ°°μ΄λ‘ λ°ν
const txt = "Hello banana and apple hahahaha";
txt.match(regex); // ['apple']
// "μ κ·ννμ"μ 맀μΉλλ νλͺ©μ "λ체문μμ΄"λ‘ λ³ν
txt.replace(regex, "watermelon"); // 'Hello banana and watermelon hahahaha'
μ κ·μ νλκ·Έ
μ κ·μ νλκ·Έλ μ κ·μμ μμ±ν λ κ³ κΈ κ²μμ μν μ μ μ΅μ μ μ€μ ν μ μλλ‘ μ§μνλ κΈ°λ₯μ΄λ€.
// flags μ νλκ·Έ λ¬Έμμ΄μ΄ λ€μ΄κ°λ€.
cosnt flags = 'i';
const regex = new RegExp('abapplec', flags);
// 리ν°λ΄λ‘ μ¬λμ¬ λ¬Έμλ€μ λ°λ‘ ννμ΄ κ°λ₯
const regex1 = /apple/i;
const regex2 = /apple/gm;
Flag | Meaning | Description |
i | Ignore Case | λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ κ²μνλ€. |
g | Global | λ¬Έμμ΄ λ΄μ λͺ¨λ ν¨ν΄μ κ²μνλ€. |
m | Multi Line | λ¬Έμμ΄μ νμ΄ λ°λλλΌλ κ²μμ κ³μνλ€. |
s | β | .β(λͺ¨λ λ¬Έμ μ κ·μ)μ΄ κ°ν λ¬Έμ \nλ ν¬ν¨νλλ‘ |
u | unicode | μ λμ½λ μ 체λ₯Ό μ§μ |
y | sticky | λ¬Έμ λ΄ νΉμ μμΉμμ κ²μμ μ§ννλ ‘sticky’ λͺ¨λλ₯Ό νμ±ν |
β
g : μ μ κ²μ
- μ μ κ²μ νλκ·Έκ° μλ κ²½μ°μλ μ΅μ΄ κ²μ κ²°κ³Ό νλ²λ§ λ°ννλ λ°λ©΄,
- μ μ κ²μ νλκ·Έκ° μλ κ²½μ°μλ λͺ¨λ κ²μ κ²°κ³Όλ₯Ό λ°°μ΄λ‘ λ°ν
// `a`κ° λ κ° ν¬ν¨λ λ¬Έμμ΄
const str = "abcabc";
// `g` νλκ·Έ μμ΄λ μ΅μ΄μ λ°κ²¬λ λ¬Έμλ§ λ°ν
str.match(/a/); // ["a", index: 0, input: "abcabc", groups: undefined]
// `g` νλκ·Έκ° μμΌλ©΄ λͺ¨λ κ²°κ³Όκ° λ°°μ΄λ‘ λ°ν
str.match(/a/g); // (2) ["a", "a"]
β
m : μ€λ°κΏ κ²μ
- μ¬λ¬ μ€μ λ¬Έμμ΄μμ νν°λ§ ν΄μΌ λ λ μ¬μ©λλ€.
- λ€μμ λ°°μΈ μ λ ₯ μμ(^) μ΅μ»€λ μ λ ₯ μ’ λ£($) μ΅μ»€λ μ 체 λ¬Έμμ΄μ΄ μλ κ° μ€ λ³λ‘ λμλκ² λ§λ€μ΄μ‘κΈ° λλ¬Έμ, λ§μΌ μ¬λ¬μ€μ κ²μν΄μΌ νλ€λ©΄ m νλκ·Έλ₯Ό μ¬μ©νλ€κ³ 보면 λλ€
// μ€λ°κΏμ΄ ν¬ν¨λ 3μ€ λ¬Έμμ΄
const str = "Hello World and\nPower Hello?\nPower Overwhelming!!";
/*
Hello World and
Power Hello?
Power Overwhelming!!
*/
// Hello λ¨μ΄λ‘ μμνλμ§ κ²μ¬ (^ λ¬Έμλ λ¬Έμ₯ μμμ μ μλ―Έ)
str.match(/^Hello/); // ["Hello"]
// → 첫λ²μ§Έ μ€μ μ μ°Ύμ
// Power λ¨μ΄λ‘ μμνλμ§ κ²μ¬ (^ λ¬Έμλ λ¬Έμ₯ μμμ μ μλ―Έ)
str.match(/^Power/); // null
// → κ·Έλ¬λ κ·Έ λ€μ μ€μ κ²μλμ§ μλν¨
// λ°λΌμ m νλκ·Έλ₯Ό ν΅ν΄ κ°νλλ λ€μ μ€λ κ²μλκ² μ€μ
str.match(/^Power/m); // ['Power']
// μΈλ²μ§Έ μ€λ κ²μλκ² νκ³ μΆμΌλ©΄ g νλκ·Έμ νΌν© μ¬μ©
str.match(/^Power/gm); // ['Power', 'Power']
β
i : λμλ¬Έμ κ΅¬λΆ μμ
- μ κ·μμ κΈ°λ³Έμ μΌλ‘ λμλ¬Έμλ₯Ό κ΅¬λΆ (Case sensitive)
- λμ i νλκ·Έλ₯Ό ν΅ν΄ λμλ¬Έμ κ΅¬λΆ νμ§ μμμ μλ€.
const str = "abcABC";
// λμλ¬Έμ a κ²μ
str.match(/a/gi); // (2) ["a", "A"]
μ κ·μ κΈ°νΈ λͺ¨μ
μ κ·μ νΉμ λ¬Έμ μ«μ λ§€μΉ ν¨ν΄
ν¨ν΄ | μλ―Έ |
a-zA-Z | μμ΄μνλ²³(-μΌλ‘ λ²μ μ§μ ) |
γ±-γ κ°-ν£ | νκΈ λ¬Έμ(-μΌλ‘ λ²μ μ§μ ) |
0-9 | μ«μ(-μΌλ‘ λ²μ μ§μ ) |
. | λͺ¨λ λ¬Έμμ΄(μ«μ, νκΈ, μμ΄, νΉμκΈ°νΈ, 곡백 λͺ¨λ) λ¨, μ€λ°κΏ X |
\d | μ«μ |
\D | μ«μκ° μλ κ² |
\w | λ°μ€ λ¬Έμλ₯Ό ν¬ν¨ν μμ«μ λ¬Έμμ λμ [A-Za-z0-9_] μ λμΌ |
\W | \w κ° μλ κ² |
\s | space 곡백 |
\S | space κ³΅λ°±μ΄ μλ κ² |
\νΉμκΈ°νΈ | νΉμκΈ°νΈ \* \^ \& \! \? ...λ± |
\b | 63κ° λ¬Έμ(μλ¬Έ λμλ¬Έμ 52κ° + μ«μ 10κ° + _(underscore))κ° μλ λλ¨Έμ§ λ¬Έμμ μΌμΉνλ κ²½κ³(boundary) |
\B | 63κ° λ¬Έμμ μΌμΉνλ κ²½κ³ |
\x | 16μ§μ λ¬Έμμ μΌμΉ /\x61/λ aμ μΌμΉ |
\0 | 8μ§μ λ¬Έμμ μΌμΉ /\141/μ aμ μΌμΉ |
\u | μ λμ½λ(Unicode) λ¬Έμμ μΌμΉ /\u0061/λ aμ μΌμΉ |
\c | μ μ΄(Control) λ¬Έμμ μΌμΉ |
\f | νΌ νΌλ(FF, U+000C) λ¬Έμμ μΌμΉ |
\n | μ€ λ°κΏ(LF, U+000A) λ¬Έμμ μΌμΉ |
\r | μΊλ¦¬μ§ 리ν΄(CR, U+000D) λ¬Έμμ μΌμΉ |
\t | ν (U+0009) λ¬Έμμ μΌμΉ |
μ κ·μ κ²μ κΈ°μ€ ν¨ν΄
κΈ°νΈ | μλ―Έ |
| | OR a|b |
[] | κ΄νΈμμ λ¬Έμλ€ μ€ νλ. or μ²λ¦¬ λ¬Άμ 보면 λλ€. /abc/ : "abc"λ₯Ό ν¬ν¨νλ /[abc]/ : "a" λλ "b" λλ "c" λ₯Ό ν¬ν¨νλ [λ€-λ°] : λ€ or λΌ or λ§ or λ° |
[^λ¬Έμ] | κ΄νΈμμ λ¬Έμλ₯Ό μ μΈν κ² [^lgEn] "l" "g" "E" "N" 4κ° λ¬Έμλ₯Ό μ μΈ β» λκ΄νΈ μμμ μ°λ©΄ μ μΈμ λ», λκ΄νΈ λ°μμ μ°λ©΄ μμμ λ» |
^λ¬Έμμ΄ | νΉμ λ¬Έμμ΄λ‘ μμ (μμμ ) /^www/ |
λ¬Έμμ΄$ | νΉμ λ¬Έμμ΄λ‘ λλ¨ (μ’
μ°©μ ) /com$/ |
μ κ·μ κ°―μ λ°λ³΅ ν¨ν΄
κΈ°νΈ | μλ―Έ |
? | μκ±°λ or μ΅λ νκ°λ§ /apple?/ |
* | μκ±°λ or μκ±°λ (μ¬λ¬κ°) /apple*/ |
+ | μ΅μ νκ° or μ¬λ¬κ° /apple+/ |
*? | μκ±°λ, μκ±°λ and μκ±°λ, μ΅λνκ° : μμ {0}μ λμΌ |
+? | μ΅μνκ°, μκ±°λ and μκ±°λ, μ΅λνκ° : νκ° {1}μ λμΌ |
{n} | nκ° |
{Min,} | μ΅μ Minκ° μ΄μ |
{Min, Max} | μ΅μ Minκ° μ΄μ, μ΅λ Maxκ° μ΄ν {3,5}? == {3}μ λμΌ |
μ κ·μ κ·Έλ£Ή ν¨ν΄
κΈ°νΈ | μλ―Έ |
() | κ·Έλ£Ήν λ° μΊ‘μ³ |
(?: ν¨ν΄) | κ·Έλ£Ήν (μΊ‘μ³ X) |
(?=) | μμͺ½ μΌμΉ(Lookahead), /ab(?=c)/ |
(?!) | λΆμ μμͺ½ μΌμΉ(Negative Lookahead), /ab(?!c)/ |
(?<=) | λ€μͺ½ μΌμΉ(Lookbehind), /(?<=ab)c/ |
(?<!) | λΆμ λ€μͺ½ μΌμΉ(Negative Lookbehind), /(?<!ab)c/ |
μ κ·μ κ·Έλ£Ή ν¨ν΄ λΆλΆμ κ½€λ λμ΄λ μλ μ κ·ννμμ μνλ€.
μ΄λ ΅κ³ μ΄ν΄κ° μ μλλ κ²μ΄ λΉμ°νλ, μ°¨κ·Όμ°¨κ·Ό μμκ°λ³΄μ.
μ κ·μ κ·Έλ£Ήν
'kokokoko'.match(/ko+/); // "ko"
'kooookoooo'.match(/ko+/); // "koooo"
μ½λλ₯Ό 보면 μμ μλ―μ΄, ννμ ko+λ "o"λ§ + λ₯Ό μ μ©μν¨λ€. ("k" λ μ μ©μμν΄)
κ·Έ κ²°κ³Όλ‘ "koooo"κ° λ°νλμλ€.
'kokokoko'.match(/(ko)+/); // "kokokoko", "ko"
'kooookoooo'.match(/(ko)+/); // "ko", "ko"
νμ§λ§ ννμ (ko)+λ "k"μ "o"λ₯Ό λ¬ΆμκΈ°(κ·Έλ£Ήν) λλ¬Έμ "ko" μ체λ₯Ό 1ν μ΄μ μ°μμΌλ‘ λ°λ³΅λλ λ¬Έμλ‘ κ²μνκ² λλ€.
λ°λΌμ κ²°κ³Όκ° "kokokoko"κ° λ°νλμλ€.
κ·Έλ°λ° λ§μ§λ§μΌλ‘ ν¨ν΄ ()λ₯Ό μ¬μ©ν μ κ·μλ€μ κ²°κ³Όλ₯Ό μ 보면 μΌμΉν κ²°κ³Όκ° 2κ°κ° λμ¨λ€.
μΌλΆλ¬ νλ²λ§ κ²μλλΌκ³ , νλκ·Έ gλ₯Ό μ¬μ©νμ§ μμλλ° λ§μ΄λ€.
β
μ κ·μ μΊ‘μ² κΈ°λ₯
ν¨ν΄ κ·Έλ£Ήν ()λ κ΄νΈ μμ μλ ννμμ μΊ‘μ²νμ¬ μ¬μ©νλ€.
μΊ‘μ²λ μΌμ’ μ 볡μ¬λ³Έμ μμ±νλ κ°λ μ΄λΌκ³ 보면 λλ€. (볡μ¬λΌλ λ¨μ΄λ μ΄ν΄λ₯Ό λκΈ° μν΄μλ§ μ¬μ©νλ©°, μ€μ κ°λ κ³Όλ λ€λ₯΄λ€)
'kokokoko'.match(/(ko)+/); // "kokokoko", "ko"
μ κ·μμ μΊ‘μ² μ리λ₯Ό μμ보μλ©΄, ν¨ν΄ ()μμ μλ "ko"λ₯Ό κ·Έλ£Ήννμ¬ μΊ‘μ²(볡μ¬)νλ€.
μ°μ μΊ‘μ²λ ννμμ λΉμ₯ μ¬μ©λμ§ μμΌλ©°, κ·Έλ£Ήνλ "ko"λ₯Ό ν¨ν΄ +λ‘ 1ν μ΄μ μ°μμΌλ‘ λ°λ³΅λλ λ¬Έμλ‘ κ²μνλ€. κ·Έλ κ² μΊ‘μ² μΈ ννμμ΄ λͺ¨λ μλνκ³ λ λ€μ 볡μ¬νλ(μΊ‘μ²λ) ννμ "ko"κ° κ²μλλ κ²μ΄λ€.
μ¦, μμ κ²μ μμλ₯Ό μ 리νμλ©΄ λ€μκ³Ό κ°κ² λλ€.
- κ·Έλ£Ήνλ "ko"λ₯Ό ν¨ν΄ +λ‘ 1ν μ΄μ μ°μμΌλ‘ λ°λ³΅νμ¬ κ²μνμ¬ "kokokoko"λ₯Ό λ°ννκ³
- μΊ‘μ²λ "ko"λ‘ κ²μνμ¬ "ko"λ₯Ό μΆκ° λ°ν
'123abc'.match(/(\d+)(\w)/); // "123a", "123", "a"
/*
1. ν¨ν΄ ()μμ ννμμ μμλλ‘ μΊ‘μ². \d+, \w
2. μΊ‘μ² ν λ¨μ ννμμΌλ‘ κ²μ.
3. ν¨ν΄ \dλ‘ μ«μλ₯Ό κ²μνλ ν¨ν΄ +λ‘ 1κ° μ΄μ μ°μλλ μ«μλ₯Ό κ²μ → "123"
4. λ€μ ν¨ν΄ \wλ λ¬Έμλ₯Ό κ²μνλ "a"κ° μΌμΉ
5. μ΅μ’
μ μΌλ‘ "123a"κ° λ°ν.
6. 첫 λ²μ§Έ μΊ‘μ²ν ννμ \d+λ‘ μ«μλ₯Ό μ¬κ²μνλ ν¨ν΄ +λ‘ 1κ° μ΄μ μ°μλλ μ«μλ₯Ό κ²μ
7. "123"κ° μΌμΉνμ¬ λ°ν
8. λλ¨Έμ§ μΊ‘μ²ν ννμ \wλ‘ λ¬Έμλ₯Ό κ²μνλ "a"κ° μΌμΉνμ¬ λ°ν
*/
μΊ‘μ²νμ§ μλ κ·Έλ£Ήν (?:)
μμμ μ΄ν΄λ΄€λ―μ΄ λ»νμ§μμ μ κ·μ κ·Έλ£Ήν μΊ‘μ³ κΈ°λ₯ λλ¬Έμ μΈλ°μλ κ²°κ³Όκ°μ μ»λ κ²μ΄ μ«λ€λ©΄, κ΄νΈ μμ ?: λ¬Έμλ₯Ό μμΌλ‘μ¨ μΊ‘μ³λ₯Ό λΉνμ±ν ν μ μλ€.
λ°λΌμ ννμ μΊ‘μ²λ₯Ό νμ§ μκΈ° λλ¬Έμ "k"μ "o"λ₯Ό κ·Έλ£Ήνν "ko"λ§μΌλ‘ κ²μλκ² λλ€.
// κ·Έλ£Ήν + μΊ‘μ²
'kokokoko'.match(/(ko)+/); // "kokokoko", "ko"
// κ·Έλ£Ήνλ§
'kokokoko'.match(/(?:ko)+/); // "kokokoko"
μ κ·ννμ μ°μ΅ μμ
μ κ·μ λ¬Έμ₯ μ°μ΅νκΈ°
/λ€/ : 'λ€'λ₯Ό 'νλ'λ§ μ°Ύλλ€.
/λ€/g : 'λ€'λ₯Ό 'λͺ¨λ' μ°Ύλλ€
* g(global) νλκ·Έλ₯Ό λ€μ λΆμΈκ±Έ κΈ°μ΅νμ.
/κ·Έλν½ μΉ΄λ/ : 'κ·Έλν½ μΉ΄λ'λ₯Ό μ°Ύλλ€.
/[a0λ]/g : "λ", "a", 0 μ€μ νλλΌλ ν¬ν¨λ κ²μ λͺ¨λ μ°Ύλλ€.
* λκ΄νΈ[]λ ORμ κΈ°λ₯μ νλ€.
/[0-9]/g : 'μ«μ0~9'λ₯Ό λͺ¨λ μ°Ύλλ€.
β’ λλ무 λΉ¨λ aκΈ μ νμ 10κ° λ¨μμμ΅λλ€. 010-1111-2222 λ‘ Call Me~!
/[^0-9]/g : 'μ«μ0~9'κ° μλ κ²μ λͺ¨λ μ°Ύλλ€.
* λκ΄νΈ[] μμμ μμ ^λ₯Ό μ°λ©΄, λΆμ (Not)μ κΈ°λ₯μ νλ€.
/[a-zA-Z]/g : 'μμ΄μνλ²³ λλ¬Έμ/μλ¬Έμ'λ₯Ό λͺ¨λ μ°Ύλλ€.
β’ λλ무 λΉ¨λ aκΈ μ νμ 10κ° λ¨μμμ΅λλ€. 010-1111-2222 λ‘ Call Me~!
/[^κ°-ν£\w\s]/g : νκΈ, μλ¬Έ, μ«μ, 곡백μ μ μΈν 'νΉμ λ¬Έμ'λ§ μ°Ύλλ€
μ κ·μ κΈ°νΈ κ°λ³ μ°μ΅νκΈ°
- κΈ°λ³Έμ μΌλ‘ λ¬Έμ μλ κ·Έλλ‘ μ λ ₯νμ¬ μ νμ΄ κ°λ₯
- μ κ·μμ λμ΄μ°κΈ°κΉμ§ ꡬλΆ
- μ κ·μμ μμ΄ λμλ¬Έμ ꡬλΆ
- ^(μΊλΏ) : ^ λ€μ λμ€λ λ¬Έμλ‘ μμλλ μμ€
- $ : $ μμ λμ€λ λ¬Έμλ‘ λλλ μμ€
- \(λ°±μ¬λμ¬) : μ΄μ€μΊμ΄ν → ^, $ μ²λΌ νΉμν κΈ°λ₯μ κ°μ§ λ¬Έμλ₯Ό μΌλ° λ¬Έμλ‘
- .(μ ) : λ¬Έμ, 곡백, νΉμλ¬Έμ λ±μ λͺ¨λ ν μ€νΈ .(μ )μ κ°μλ‘ μ¬λ¬λ¨μ μ ν κ°λ₯
- [] (Square Braket) : μμ λ€μ΄κ°λ λ¬Έμ λ¨μ νλνλ (or)
- [1-9] / [a-z] / [A-z] μ κ°μ΄ λ²μ μ€μ μ΄ κ°λ₯
- [^x-z] μ κ°μ΄ ^(μΊλΏ)μ λΆμ¬μ λΆμ (μ μΈ)μ λ»
- (λ¬Έμ|λ¬Έμ|λ¬Έμ) : () μμ λ€μ΄κ° λ¬Έμλ₯Ό μ ν |(νμ΄νλΌμΈ)μ μ΄μ©ν΄ λλ μ μλ€.
- * : * μμ μ λ ₯λ λ¬Έμκ° μκ±°λ μμ κ²½μ°
- + : +μμ μ λ ₯λ λ¬Έμκ° νλμμ μ¬λ¬κ° (μ΅μ νλ)
- ? : ?μμ μ λ ₯λ λ¬Έμκ° μκ±°λ νλμΈ κ²½μ° (μ΅λ νλ)
- μλμμ ?λ₯Ό λΆμ¬μ£Όμ΄ μλμμ μ΅μ μ«μλ‘ κ³ μ μ΄ κ°λ₯νλ€. (*? - 0κ°, +? - 1κ°)
- Greedy : ν΄λΉνλ λͺ¨λ ν μ€νΈλ₯Ό μ ν
- Non-Greedy (Lazy) : ν΄λΉνλ λΆλΆμ ν μ€νΈλ₯Ό μ ν
- {} : μ«μλ‘ λ¨μλ₯Ό νννμ¬ μ ν
- {n, m} μμ μ λ ₯λ λ¬Έμκ° nκ° μ΄μ mκ° λ―Έλ§
- {n,} λ€μ μΈμλ₯Ό λΉμλλ©΄ nκ° μ΄μμ μλ―Έ
- \w : λͺ¨λ λ¬Έμ [A-z0-9] μ _(μΈλλ°) κΉμ§ ν¬ν¨
- \W : λλ¬Έμ Wλ wμ μ λ°λμ μλ―Έ
- \d : μ«μλ₯Ό μλ―Έ (\Dλ λ°λμ μλ―Έ)
- \b(λ°μ΄λ리) : λ¨μ΄μ λ¨μλ‘ μ ν (\Bλ λ°λμ μλ―Έ)
- μ /νλ°© νμ (?=g) : νΉμ λ¬Έμ μκΉμ§λ§ μ‘°ν (λͺ¨λ λ¬Έμμ΄ 3κ°λ₯Ό μ νν κ±΄λ° gμμ λΆμ κ²λ§ μ‘°ν)
μ κ·ννμ μν μ½λ
μ κ·μ μ€λ¬΄ μμ
νΉμ λ¨μ΄λ‘ λλλμ§ κ²μ¬
const fileName = 'index.html';
// 'html'λ‘ λλλμ§ κ²μ¬
// $ : λ¬Έμμ΄μ λμ μλ―Ένλ€.
const regexr = /html$/;
μ«μλ‘λ§ μ΄λ£¨μ΄μ Έ μλμ§ κ²μ¬
const targetStr = '12345';
// λͺ¨λ μ«μμΈμ§ κ²μ¬
// [] λ°κΉ₯μ ^λ λ¬Έμμ΄μ μ²μμ μλ―Ένλ€.
const regexr = /^\d+$/;
β
μμ΄λ μ¬μ© κ²μ¬
- μνλ²³ λμλ¬Έμ λλ μ«μλ‘ μμνκ³ λλλ©° 4 ~10μ리μΈμ§ κ²μ¬
const id = 'abc123';
// μνλ²³ λμλ¬Έμ λλ μ«μλ‘ μμνκ³ λλλ©° 4 ~10μ리μΈμ§ κ²μ¬
// {4,10}: 4 ~ 10μ리
const regexr = /^[A-Za-z0-9]{4,10}$/;
νΈλν° λ²νΈ νμ
const cellphone = '010-1234-5678';
const regexr = /^\d{3}-\d{3,4}-\d{4}$/;
β
μΉμ¬μ΄νΈ μ£Όμ νμ
- http:// λ https://λ‘ μμνκ³ , μνλ²³, μ΄λμ€μ½μ΄(_), νμ΄ν(-), dot(.)μΌλ‘ μ΄λ£¨μ΄μ Έ μλ μ κ·μ
const text =
`http://dogumaster.com http://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`;
text.match(/https?:\/\/[\w\-\.]+/g); // ["http://dogumaster.com", "http://google.com"]
/*
1) http => λ‘ μμνκ³ ,
2) s? => λ€μμ sλ μκ±°λ, μκ³ ,
3) \/\/ => λ€μμ νΉμκΈ°νΈ // κ° μ€κ³
4) [\w\-\.]+ => \w(μλ¬Έμ, μΈλμ€μ½μ΄), νμ΄ν, μ© μΌλ‘ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μ΄ νκ° μ΄μ(+) μλ€.
5) g => 맀μΉλλκ±Έ λͺ¨λ λ€ μ°Ύλλ€.(νλκ·Έ)
*/
μ νλ²νΈ νμ
- μ μ λ²νΈλΌλ©΄ 02-111-2222 νμμ΄κ³ , νΈλν°λ²νΈλΌλ©΄ 010-1111-2222 νμμ λͺ¨λ ν¬ν¨νλ μ κ·μ (μ«μμ κ°―μκ° λ€λ¦)
const text =
`http://dogumaster.com http://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`;
text.match(/\d{2,3}-\d{3,4}-\d{4}/g); // [ '010-1111-2222', '02-333-7777' ]
/*
1) \d{2,3} => μ«μ 2~3κ°λ‘ μμνκ³ ,
2) \- => λ€μμ νμ΄ν(-)μ΄ μ€κ³
3) \d{3, 4} => λ€μμ μ«μκ° 3~4κ° μ€κ³ ,
4) \- => λ€μμ νμ΄ν(-)μ΄ μ€κ³ ,
5) \d{4} => λ€μμ μ«μκ° 4κ° μ¨λ€.
6) g => 맀μΉλλκ±Έ λͺ¨λ λ€ μ°Ύλλ€(νλκ·Έ)
*/
μ΄λ©μΌμ£Όμ νμ
- xxx@xxxx.com λ±μ νμ
const text = `http://dogumaster.com http://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`;
text.match(/[\w\-\.]+\@[\w\-\.]+/g); // [ 'curryyou@aaa.com' ]
// μ’λ μ격ν κ²μ¬κ° νμνλ€λ©΄, μν©μ λ§κ² μμ ν΄μ μ¬μ©λ©΄ λλ€.
const email = 'ungmo2@gmail.com';
const regexr = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/;
νΉμκΈ°νΈ μ κ·ννμ
// λͺ¨λ νΉμκΈ°νΈλ₯Ό λμ΄
const regex = /\[\]\{\}\/\(\)\.\?\<\>!@#$%^&*/g
// λ¬Έμμ μ«μκ° μλκ²μ 맀μΉ
const regex = /[^a-zA-Z0-9κ°-ν£γ±-γ
]/g
μ΄λ°μ μ κ·ννμ λͺ¨μ
/* μ νλ²νΈ */
var localPhone = /^(0(2|3[1-3]|4[1-4]|5[1-5]|6[1-4]))(\d{3,4})(\d{4})$/;
var cellPhone = /^(?:(010\d{4})|(01[1|6|7|8|9]-\d{3,4}))(\d{4})$/;
/* μ«μ νμ */
var number = /[0-9]/;
var unsignedInt = /^[1-9][0-9]*$/;
var notNumber = /[^(0-9)]/gi;
/* λ¬Έμ νμ */
var korea_cv = /[γ±-γ
|γ
-γ
£]/;
var korea = /[κ°-ν£]/;
var koreaName = /[κ°-ν£]/;
var english = /[a-z | A-Z]/;
/* νΉλ¬Έ */
var special_char = /[\{\}\[\]\/?.,;:|\)*~`!^\-+<>@\#$%&\\\=\(\'\"]/;
var comma_char = /,/g;
var blank = /[\s]/g;
/* μμ΄λ / λΉλ°λ²νΈ */
var id_check = /^[a-z | A-Z]{3,6}[0-9]{3,6}$/;
var password =/^.*(?=.{6,20})(?=.*[0-9])(?=.*[a-zA-Z]).*$/;
/* μ΄λ©μΌ νμ */
var email =/([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
/* λλ©μΈ νμ */
var domain_all =/([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)
|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
var domain_include = /^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/;
var domain_exclude = /^[^((http(s?))\:\/\/)]([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/;
/* μλ¬Έ νκΈλ§ */
var ko_en_num_charactor = /^[κ°-ν£a-zA-Z0-9]*$/;
var ko_en_charactor = /^[κ°-ν£a-zA-Z]*$/;
/* μλμ°¨ λ²νΈν */
var car = /^[0-9]{2}[\s]*[κ°-ν£]{1}[\s]*[0-9]{4}$/;
var old_car = /^[κ°-ν£]{2}[\s]*[0-9]{2}[\s]*[κ°-ν£]{1}[\s]*[0-9]{4}$/;
μ κ·μ λͺ¨μ μ¬μ΄νΈ
μμ£Ό μ¬μ©νλ μ κ·ννμ μμ λ€μ΄ λͺ¨μ¬μλ μ¬μ΄νΈμ΄λ€.
λ§μΌ μ΄λ©μΌμ΄λ μ νλ²νΈλ₯Ό 체ν¬νλ μ κ·μ λ¬Έλ²μ΄ νμνλ€λ©΄, κ²μμ°½μ μ°ΎμΌλ €λ νμ μ μΉκ³ κ²μνλ©΄ μ¬λ¬ μ κ·μ μμ λ€μ μ»μ μ μλ€.
μ κ·μμ μ¨λΌμΈμΌλ‘ νλμ 체ν¬
μΉμμ μ κ·μμ λ°λ‘λ°λ‘ ν μ€νΈν μ μκ³ , μ΄λ°μ νΈλ¦¬ν λκ΅¬λ‘ μ¬λ¬ κΈ°λ₯μ μ΄μ©ν μ μλ€.
# μ°Έκ³ μλ£
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
https://heropy.blog/2018/10/28/regexp/
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
https://ko.javascript.info/regular-expressions
https://velog.io/@tkdfo93/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9DRegExr
https://curryyou.tistory.com/234