Language/JavaScript

πŸ“š JavaScript μ •κ·œ ν‘œν˜„μ‹ 문법 총정리 + μ‘μš© 예제

인파_ 2022. 10. 5. 18:19

RegExp

μ •κ·œ ν‘œν˜„μ‹(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 λŠ” μ •κ·œμ‹ ν”Œλž˜κ·Έμ΄λ‹€.

js-regex

// λ¦¬ν„°λŸ΄ 방식
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"κ°€ κ²€μƒ‰λ˜λŠ” 것이닀.

 

즉, μœ„μ˜ 검색 μˆœμ„œλ₯Ό μ •λ¦¬ν•˜μžλ©΄ λ‹€μŒκ³Ό κ°™κ²Œ λœλ‹€.

  1. κ·Έλ£Ήν™”λœ "ko"λ₯Ό νŒ¨ν„΄ +둜 1회 이상 μ—°μ†μœΌλ‘œ λ°˜λ³΅ν•˜μ—¬ κ²€μƒ‰ν•˜μ—¬ "kokokoko"λ₯Ό λ°˜ν™˜ν•˜κ³ 
  2. 캑처된 "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"

μ •κ·œν‘œν˜„μ‹ μ—°μŠ΅ 예제

 

μ •κ·œμ‹ λ¬Έμž₯ μ—°μŠ΅ν•˜κΈ°

js-regex
μƒ˜ν”Œ λ¬Έμžμ—΄

 

/λ‹€/ : 'λ‹€'λ₯Ό 'ν•˜λ‚˜'만 μ°ΎλŠ”λ‹€.

js-regex

 

 

/λ‹€/g : 'λ‹€'λ₯Ό 'λͺ¨λ‘' μ°ΎλŠ”λ‹€

js-regex

* g(global) ν”Œλž˜κ·Έλ₯Ό 뒀에 뢙인걸 κΈ°μ–΅ν•˜μž.

 

 

/κ·Έλž˜ν”½ μΉ΄λ“œ/ : 'κ·Έλž˜ν”½ μΉ΄λ“œ'λ₯Ό μ°ΎλŠ”λ‹€.

js-regex

 

 

/[a0λ“œ]/g : "λ“œ", "a", 0 쀑에 ν•˜λ‚˜λΌλ„ ν¬ν•¨λœ 것을 λͺ¨λ‘ μ°ΎλŠ”λ‹€.

js-regex

* λŒ€κ΄„ν˜Έ[]λŠ” OR의 κΈ°λŠ₯을 ν•œλ‹€.

 

 

/[0-9]/g : '숫자0~9'λ₯Ό λͺ¨λ‘ μ°ΎλŠ”λ‹€.

β‡’ λŒ€λ‚˜λ¬΄ λΉ¨λŒ€ aκΈ‰ μ œν’ˆμ€ 10개 λ‚¨μ•„μžˆμŠ΅λ‹ˆλ‹€. 010-1111-2222 λ‘œ Call Me~!

js-regex

 

 

/[^0-9]/g : '숫자0~9'κ°€ μ•„λ‹Œ 것을 λͺ¨λ‘ μ°ΎλŠ”λ‹€.

js-regex

* λŒ€κ΄„ν˜Έ[] μ•ˆμ—μ„œ μ•žμ— ^λ₯Ό μ“°λ©΄, λΆ€μ •(Not)의 κΈ°λŠ₯을 ν•œλ‹€.

 

 

/[a-zA-Z]/g : 'μ˜μ–΄μ•ŒνŒŒλ²³ λŒ€λ¬Έμž/μ†Œλ¬Έμž'λ₯Ό λͺ¨λ‘ μ°ΎλŠ”λ‹€.

β‡’ λŒ€λ‚˜λ¬΄ λΉ¨λŒ€ aκΈ‰ μ œν’ˆμ€ 10개 λ‚¨μ•„μžˆμŠ΅λ‹ˆλ‹€. 010-1111-2222 둜 Call Me~!

js-regex

 

 

/[^κ°€-힣\w\s]/g : ν•œκΈ€, 영문, 숫자, 곡백을 μ œμ™Έν•œ '특수 문자'만 μ°ΎλŠ”λ‹€

js-regex


μ •κ·œμ‹ 기호 κ°œλ³„ μ—°μŠ΅ν•˜κΈ°

  • 기본적으둜 문자 μžˆλŠ” κ·ΈλŒ€λ‘œ μž…λ ₯ν•˜μ—¬ 선택이 κ°€λŠ₯
  • μ •κ·œμ‹μ€ λ„μ–΄μ“°κΈ°κΉŒμ§€ ꡬ뢄
  • μ •κ·œμ‹μ€ μ˜μ–΄ λŒ€μ†Œλ¬Έμž ꡬ뢄

μ •κ·œμ‹-예제-ν™œμš©

 

  • ^(캐럿) : ^ 뒀에 λ‚˜μ˜€λŠ” 문자둜 μ‹œμž‘λ˜λŠ” μ†ŒμŠ€

μ •κ·œμ‹-예제-ν™œμš©

 

  • $ : $ μ•žμ— λ‚˜μ˜€λŠ” 문자둜 λλ‚˜λŠ” μ†ŒμŠ€

μ •κ·œμ‹-예제-ν™œμš©

 

  • \(λ°±μŠ¬λž˜μ‰¬) : μ΄μŠ€μΊμ΄ν•‘ → ^, $ 처럼 νŠΉμˆ˜ν•œ κΈ°λŠ₯을 가진 문자λ₯Ό 일반 문자둜

μ •κ·œμ‹-예제-ν™œμš©

 

  • .(점) : 문자, 곡백, 특수문자 λ“±μ˜ λͺ¨λ“  ν…μŠ€νŠΈ .(점)의 개수둜 μ—¬λŸ¬λ‹¨μœ„ 선택 κ°€λŠ₯

μ •κ·œμ‹-예제-ν™œμš©

 

  • [] (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

js-regex-online


μ •κ·œμ‹μ„ 온라인으둜 ν•œλˆˆμ— 체크

μ›Ήμ—μ„œ μ •κ·œμ‹μ„ λ°”λ‘œλ°”λ‘œ ν…ŒμŠ€νŠΈν•  수 있고, μ΄λ°–μ˜ νŽΈλ¦¬ν•œ λ„κ΅¬λ‘œ μ—¬λŸ¬ κΈ°λŠ₯을 μ΄μš©ν•  수 μžˆλ‹€.

 

πŸ’» μ •κ·œμ‹ ν…ŒμŠ€νŠΈ μ‚¬μ΄νŠΈ 🎁 λͺ¨μŒ

μ •κ·œμ‹ ν…ŒμŠ€νŠΈ μ‚¬μ΄νŠΈ λͺ¨μŒ μ •κ·œν‘œν˜„μ‹(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