π 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}$/;
μ κ·μ λͺ¨μ μ¬μ΄νΈ
μμ£Ό μ¬μ©νλ μ κ·ννμ μμ λ€μ΄ λͺ¨μ¬μλ μ¬μ΄νΈμ΄λ€.
λ§μΌ μ΄λ©μΌμ΄λ μ νλ²νΈλ₯Ό 체ν¬νλ μ κ·μ λ¬Έλ²μ΄ νμνλ€λ©΄, κ²μμ°½μ μ°ΎμΌλ €λ νμ μ μΉκ³ κ²μνλ©΄ μ¬λ¬ μ κ·μ μμ λ€μ μ»μ μ μλ€.
Regular Expression Library
Welcome to RegExLib.com, the Internet's first Regular Expression Library. Currently we have indexed 4149 expressions from 2818 contributors around the world. We hope you'll find this site useful and come back whenever you need help writing an expression, y
regexlib.com
μ κ·μμ μ¨λΌμΈμΌλ‘ νλμ 체ν¬
μΉμμ μ κ·μμ λ°λ‘λ°λ‘ ν μ€νΈν μ μκ³ , μ΄λ°μ νΈλ¦¬ν λκ΅¬λ‘ μ¬λ¬ κΈ°λ₯μ μ΄μ©ν μ μλ€.
π» μ κ·μ ν μ€νΈ μ¬μ΄νΈ π λͺ¨μ
μ κ·μ ν μ€νΈ μ¬μ΄νΈ λͺ¨μ μ κ·ννμ(regex)μ μ’ μ’ μ¬μ©νλλ°.. μ¬μ©ν λλ§λ€ μ΄κ² λ§λμ§ κΈ΄κ°λ―Όκ° νλ λκ° λ§μλ°, λ°λ‘λ°λ‘ ν μ€νΈλ₯Ό νλ©΄μ μ κ·ννμμ μμ±νκΈ° μ’μ μΉμ¬μ΄νΈμ΄
inpa.tistory.com
# μ°Έκ³ μλ£
λͺ¨λ μλ°μ€ν¬λ¦½νΈ 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