Frontend/JavaScript

[ μžλ°”μŠ€ν¬λ¦½νŠΈ(JavaScript) ] RegExp(μ •κ·œν‘œν˜„μ‹)의 κ°œλ…κ³Ό μ‘μš© 예제 μ‚΄νŽ΄λ³΄κΈ°

YWTechIT 2022. 4. 14. 09:43
728x90

πŸ“ RegExp(μ •κ·œν‘œν˜„μ‹)의 κ°œλ…κ³Ό μ‘μš© 예제 μ‚΄νŽ΄λ³΄κΈ°

RegExpλŠ” μ •κ·œν‘œν˜„μ‹μ΄λΌκ³  λΆ€λ₯΄λŠ”데 λ¬Έμžμ—΄μ„ λŒ€μƒμœΌλ‘œ νŒ¨ν„΄ 맀칭 κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. νŒ¨ν„΄ 맀칭 κΈ°λŠ₯κ³Ό νŠΉμ • νŒ¨ν„΄κ³Ό μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ„ κ²€μƒ‰ν•˜κ±°λ‚˜ μΆ”μΆœ λ˜λŠ” μΉ˜ν™˜ν•  수 μžˆλŠ” κΈ°λŠ₯을 λ§ν•œλ‹€. μ—¬λŸ¬ λ°©λ©΄μ—μ„œλ„ μ‚¬μš©λ˜μ§€λ§Œ 보톡 κΈ€μ“΄μ΄λŠ” μ•Œκ³ λ¦¬μ¦˜ 문제λ₯Ό ν’€κ±°λ‚˜ ν”„λ‘œμ νŠΈ μ‹œ util κ΄€λ ¨ ν•¨μˆ˜λ₯Ό λ§Œλ“€ λ•Œ 주둜 μ‚¬μš©ν•œλ‹€. μ •κ·œν‘œν˜„μ‹μ˜ μž₯점은 반볡문과 쑰건문 없이 νŒ¨ν„΄μ„ μ •μ˜ν•˜κ³  ν…ŒμŠ€νŠΈν•˜λŠ” κ²ƒμœΌλ‘œ κ°„λ‹¨νžˆ 체크할 수 μžˆλ‹€. ν•˜μ§€λ§Œ, μ—¬λŸ¬ 가지 기호λ₯Ό ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 처음 μ ‘ν•œλ‹€λ©΄ 가독성이 맀우 쒋지 λͺ»ν•œ 단점이 μžˆλ‹€. μ •κ·œν‘œν˜„μ‹μ—λŠ” λ‹€μ–‘ν•œ νŒ¨ν„΄μ΄ μžˆμ§€λ§Œ 그쀑 λŒ€ν‘œμ μœΌλ‘œ μ“°μ΄λŠ” κ²ƒλ“€λ§Œ μ•Œμ•„λ³΄μž.

 

본둠으둜 λ“€μ–΄κ°€κΈ° 전에 μ •κ·œ ν‘œν˜„μ‹μ˜ 검색 방식을 μ„€μ •ν•˜λŠ” ν”Œλž˜κ·Έκ°€ μžˆλŠ”λ°, 총 6개의 ν”Œλž˜κ·Έκ°€ μžˆλ‹€. ν”Œλž˜κ·ΈλŠ” μ—¬λŸ¬ 개 넣을 수 있으며, ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ—¬ νŒ¨ν„΄μ„ κ²€μƒ‰ν•œλ‹€. λ˜ν•œ 검색 맀칭 λŒ€μƒμ΄ μ—¬λŸ¬ κ°œμ—¬λ„ 첫 번째 맀칭 λŒ€μƒλ§Œ κ²€μƒ‰ν•˜κ³  μ’…λ£Œν•œλ‹€.(μ—¬λŸ¬ 개의 맀칭 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λ €λ©΄ gν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.)

1. g(global): νŒ¨ν„΄κ³Ό μΌμΉ˜ν•˜λŠ” λͺ¨λ“  값듀을 μ „μ—­ κ²€μƒ‰ν•œλ‹€. (λ°˜μ„±λ¬Έμ„ μ˜μ–΄λ‘œ ν•΄μ„ν•œ 것이 μ•„λ‹˜ πŸ™ƒ)
2. i(ignoreCase): λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  νŒ¨ν„΄μ„ κ²€μƒ‰ν•œλ‹€.
3. m(multiLine): λ¬Έμžμ—΄μ˜ 행이 λ°”λ€Œλ”λΌλ„ νŒ¨ν„΄ 검색을 μ§€μ†ν•œλ‹€.
4. s(source): κ°œν–‰ 문자인 `\n`도 ν¬ν•¨ν•˜λ„λ‘ ν™œμ„±ν™” ν•œλ‹€.
5. u(unicode): μœ λ‹ˆμ½”λ“œ 전체λ₯Ό μ§€μ›ν•œλ‹€.
6. y(sticky): 문자 λ‚΄ νŠΉμ • μœ„μΉ˜μ—μ„œ 검색을 μ§„ν–‰ν•˜λŠ” `sticky` λͺ¨λ“œλ₯Ό ν™œμ„±ν™” μ‹œν‚¨λ‹€.

 

ν•˜λ‚˜λ§Œ 더 μ•Œμ•„λ³΄μž. λ°”λ‘œ νŒ¨ν„΄μΈλ°, ν”Œλž˜κ·ΈλŠ” μ •κ·œ ν‘œν˜„μ‹μ˜ 검색 방식을 μ„€μ •ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€λ©΄, μ •κ·œν‘œν˜„μ‹μ˜ νŒ¨ν„΄μ€ λ¬Έμžμ—΄μ˜ μΌμ •ν•œ κ·œμΉ™μ„ ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. νŒ¨ν„΄μ€ λ¬Έμžμ—΄μ˜ λ”°μ˜΄ν‘œ λŒ€μ‹  /둜 μ—΄κ³  λ‹«λŠ”λ‹€. 즉, "Hello"κ°€ μ•„λ‹ˆλΌ /Hello/둜 처럼 μ‚¬μš©ν•˜λŠ” 것이닀. λ§Œμ•½, λ”°μ˜΄ν‘œλ₯Ό ν¬ν•¨ν•œλ‹€λ©΄ λ”°μ˜΄ν‘œκΉŒμ§€λ„ νŒ¨ν„΄μ— ν¬ν•¨λ˜λ‹ˆ 이 점에 μ£Όμ˜ν•˜μž. νŒ¨ν„΄μ˜ μ’…λ₯˜λŠ” λ§ˆμ°¬κ°€μ§€λ‘œ μ—¬λŸ¬ 개 μžˆμ§€λ§Œ 주둜 μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄μ€ λ‹€μŒκ³Ό κ°™λ‹€.

 

  1. [ ] : κ΄„ν˜Έμ•ˆμ— μžˆλŠ” 값은 or 을 λ‚˜νƒ€λƒ„
  2. \d: [ 0-9 ]λ₯Ό μ˜λ―Έν•¨
  3. \D: μˆ«μžκ°€ μ•„λ‹Œ 문자λ₯Ό μ˜λ―Έν•¨
  4. \w: μ•ŒνŒŒλ²³, 숫자, μ–Έλ”μŠ€μ½”μ–΄λ₯Ό μ˜λ―Έν•¨( [ A-Za-z0-9 ])
  5. \W: μ•ŒνŒŒλ²³, 숫자, μ–Έλ”μŠ€μ½”μ–΄κ°€ μ•„λ‹Œ 문자λ₯Ό μ˜λ―Έν•¨
  6. /s: μ—¬λŸ¬ 가지 곡백 문자(슀페이슀, 택 λ“±)λ₯Ό μ˜λ―Έν•œλ‹€. [/t/r/n/v/f] 와 같은 μ˜λ―Έλ‹€.
  7. *: 이전 ν•­λͺ©μ„ 0번 이상 λ°˜λ³΅ν•¨
  8. +: 이전 ν•­λͺ©μ„ 1회 이상 λ°˜λ³΅ν•¨
  9. ^: [ ] 내뢀에 μžˆλŠ” ^ λŠ” not 을 μ˜λ―Έν•˜κ³ , [ ] 외뢀에 μžˆλŠ” ^ λŠ” λ¬Έμžμ—΄μ˜ μ‹œμž‘μ„ μ˜λ―Έν•œλ‹€.
  10. $: λ¬Έμžμ—΄μ˜ λ§ˆμ§€λ§‰μ„ μ˜λ―Έν•œλ‹€.
  11. ?: μ•žμ„  νŒ¨ν„΄μ΄ μ΅œλŒ€ ν•œ 번 이상(0번 포함) λ°˜λ³΅λ˜λŠ”μ§€λ₯Ό μ˜λ―Έν•œλ‹€. 즉, μ•žμ„  νŒ¨ν„΄ (s)이 μžˆκ±°λ‚˜ 없어도 λ§€μΉ˜λœλ‹€.
  12. {m,n}: 반볡 검색 νŒ¨ν„΄μœΌλ‘œ μ΅œμ†Œ m번, μ΅œλŒ€ n번 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ μ˜λ―Έν•œλ‹€. 콀마 뒀에 곡백이 μ˜€μ§€ μ•Šκ²Œ μ£Όμ˜ν•˜μž.
728x90

자, 이제 ν”Œλž˜κ·Έμ™€ νŒ¨ν„΄μ— λŒ€ν•΄μ„œ μ•Œμ•„λ΄€μœΌλ‹ˆ 본격적으둜 RegExp λ©”μ„œλ“œμ— λŒ€ν•΄ μ•Œμ•„λ³΄μž. MDN에 μ ν˜€μžˆλ“―μ΄ λ©”μ„œλ“œλ„ μ—¬λŸ¬ 개 μžˆμ§€λ§Œ, μ—¬κΈ°μ„œλŠ” exec, match, testμ •λ„λ§Œ μ•Œμ•„λ³΄μž.

 

  1. exec: 맀칭 κ²°κ³Όλ₯Ό λ°°μ—΄λ‘œ λ°˜ν™˜ν•œλ‹€. 맀칭 κ²°κ³Όκ°€ μ—†λŠ” 경우 null둜 λ°˜ν™˜ν•œλ‹€. νŠΉμ΄μ‚¬ν•­μœΌλ‘œλŠ” g ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ 첫 번째 맀칭 결과만 λ°˜ν™˜ν•œλ‹€.
let target = "is";
let str = "what is your name? my name is ywtechit";

console.log(/is/g.exec(target));
πŸ‘‰πŸ½ [ 'is', index: 0, input: 'is', groups: undefined ]
  1. match: 주어진 λ¬Έμžμ—΄μ— λŒ€ν•΄ μΌμΉ˜ν•˜λŠ” κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€. exec λ©”μ„œλ“œμ™€λŠ” λ‹€λ₯΄κ²Œ g ν”Œλž˜κ·Έλ₯Ό μ§€μ •ν•˜λ©΄ λͺ¨λ“  맀칭 κ²°κ³Όλ₯Ό λ°°μ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.
// ex1: 문자 'p'의 개수λ₯Ό return ν•˜μ‹œμ˜€
let lyrics = "i have a pen pineapple apple pen";
let reg = lyrics.match(/p/g) // [ 'p', 'p', 'p', 'p', 'p', 'p', 'p' ]
console.log(reg.length)
πŸ‘‰πŸ½ 7  // λ°°μ—΄μ˜ 길이가 곧 `p`의 κ°œμˆ˜μ™€ λ™μΌν•˜λ‹€.

let target = "what is your name? my name is ywtechit";

// ex2: is 값을 ν•œλ²ˆλ§Œ μ°ΎκΈ°
console.log(target.match(/is/));
πŸ‘‰πŸ½ [ 'is', index: 5, input: 'what is your name? my name is ywtechit', groups: undefined ]

// ex3: is 값을 λͺ¨λ‘ μ°ΎκΈ°
console.log(target.match(/is/g));
πŸ‘‰πŸ½ [ 'is', 'is' ]

// ex4: Aκ°€ 2λ²ˆμ΄μƒ λ°˜λ³΅ν•˜λŠ” λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜κΈ°
const target = "A AA B BB Aa Bb AAA";
const regExp = /A{2,}/g;
const result = target.match(regExp)
console.log('result :>> ', result);  // [ "AA", "AAA" ]

// ex5: URL 제일 λ§ˆμ§€λ§‰ κ°’λ§Œ μΆ”μΆœν•˜λŠ” μ •κ·œν‘œν˜„μ‹
const url = "https://swtrack.elice.io/courses/16306/lecturerooms/16157";
const reg = url.match(/\/([0-9]+)$/);

console.log(reg);
πŸ‘‰πŸ½
[
  0: '/16157',
  1: '16157',
  2: index: 51,
  3: input: 'https://swtrack.elice.io/courses/16306/lecturerooms/16157',
  4: groups: undefined
]

// ex6: URL에 ν¬ν•¨λœ νŠΉμ • 문자 λΆ„λ¦¬ν•˜κΈ°
let reg = s.match(/\/(lecturerooms)\/([0-9]+$)/);
console.log(reg);
πŸ‘‰πŸ½
[
    0: "/lecturerooms/16157"
    1: "lecturerooms"
    2: "16157"
    groups: undefined
    index: 38
    input: "https://swtrack.elice.io/courses/16306/lecturerooms/16157"
    length: 3
]

// ex7: 문자의 λ‚΄μš©κ³Ό 상관없이 3자리 λ¬Έμžμ—΄κ³Ό λ§€μΉ˜ν•˜κΈ°
let target = "Is this your mac? Is this your phone?";
console.log(target.match(/.../g));
πŸ‘‰πŸ½
[
  'Is ', 'thi', 's y',
  'our', ' ma', 'c? ',
  'Is ', 'thi', 's y',
  'our', ' ph', 'one'
]
  1. test: 맀칭결과λ₯Ό λΆˆλ¦¬μ–Έ(boolean)κ°’μœΌλ‘œ λ°˜ν™˜ν•œλ‹€. μ§€κΈˆκΉŒμ§€ 이 λ©”μ„œλ“œλ₯Ό 제일 많이 μ‚¬μš©ν–ˆλ‹€. μ—¬λ‹΄μœΌλ‘œ μ˜¬λ°”λ₯Έ 이메일 ν˜•μ‹μΈμ§€ κ²€μ‚¬ν•˜λŠ” 곡식 νŒ¨ν„΄(FC 5322 Official Standard)은 emailregex.comμ—μ„œλ„ 확인 ν•  수 μžˆλ‹€.
// ex1: ν•΄λ‹Ή λ¬Έμžμ—΄μ΄ μžˆλŠ”μ§€ κ²€μ‚¬ν•˜κΈ°
let target = "what is your name? my name is ywtechit";

console.log(/is/.test(target));  // true

console.log(/typescript/.test(target));  // false

// ex2: new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œ RegExp와 new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ€ RegExp
const str = 'table football';
const regex = new RegExp('foo*');
const sameRegex = /foo*/;
const globalRegex = new RegExp('foo*', 'g');

console.log(regex.test(str));  // true

console.log(globalRegex.lastIndex);  // 0

console.log(globalRegex.test(str));  // true

console.log(globalRegex.lastIndex);  // 9

console.log(globalRegex.test(str));  // false

// ex3: μ˜¬λ°”λ₯Έ μ „ν™”λ²ˆν˜Έ ν˜•μ‹μΈμ§€ νŒλ³„ν•˜λŠ” νŒ¨ν„΄
const tel = "010-1234-1234"
const regExp = /^\d{3}-\d{4}-\d{4}$/;
const result = regExp.test(tel);
console.log('result :>> ', result);  // true

// ex4: http://, https://둜 μ‹œμž‘ν•˜λŠ” 도메인인지 νŒλ³„ν•˜λŠ” νŒ¨ν„΄
const domain = "https://www.naver.com";
const regExp = /^(http|https):\/\//;
const regExp2 = /^https?:\/\//;
const result = regExp.test(domain);
console.log('result :>> ', result);  // true

// ex5: html둜 λλ‚˜λŠ” 파일λͺ…인지 νŒλ³„ν•˜λŠ” νŒ¨ν„΄
const string = "index.html";
const regExp = /html$/
const result = regExp.test(string)
console.log('result :>> ', result);  // true

// ex6: μ†Œμˆ˜μ μ„ μ΅œλŒ€ 2λ²ˆκΉŒμ§€λ§Œ μ‚¬μš©ν•˜λŠ” μž…λ ₯인가?
const isUptoTwoDecimalPoint = (input: string): boolean => {
  const isIncludeDot = /[.]/g;

  if (isIncludeDot.test(input)) {
    const isTwoDecimalPoint = /^\d+[.]\d{1,2}$/;
    if (isTwoDecimalPoint.test(input)) return true;
    return false;
  }
  return true;
};

// ex7: ν•˜λ‚˜ μ΄μƒμ˜ 곡백으둜 μ‹œμž‘ν•˜λŠ”κ°€?
const string = " Hi!!";
const regExp = /^[\s]+/
const result = regExp.test(string)
console.log('result :>> ', result);  // true

// ex8: μ•ŒνŒŒλ²³ λŒ€μ†Œλ¬Έμž λ˜λŠ” 숫자둜 μ‹œμž‘ν•˜κ³  λλ‚˜λ©° 4~10μžλ¦¬μΈκ°€?
const string = "abcd8637";
const regExp = /^[\w]{4,10}$/
const result = regExp.test(string)
console.log('result :>> ', result);  // true

// ex9: μ˜¬λ°”λ₯Έ 이메일 ν˜•μ‹μΈκ°€?
const string = "ywtechit@gmail.com";
const regExp = /^[\w]([-_\.]?[\w])*@[\w]([-_\.]?[\w])*\.[a-zA-Z]{2,3}$/
const result = regExp.test(string)
console.log('result :>> ', result);  // trueβ€ˆβ€‹β€‹β€‹β€‹β€‹at

// General Email Regex (RFC 5322 Official Standard)
const regExp = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

// HTML5 input νƒœκ·Έμ˜ type=”email”에 μ‚¬μš©λ˜λŠ” νŒ¨ν„΄(from W3C: Ref 5.)
<input type="email" placeholder="Enter your email" />
const regExp = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

// ex10: 특수문자 νŒλ³„ν•˜κΈ°
let s = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
let answer = "";

console.log(solution(s));

function solution(s) {
  for (let x of s) {
    if (/[A-Z]/.test(x)) answer+=x;
  }
  return answer;
}

πŸ‘‰πŸ½ ABCDEFGHIJKLMN
  1. replace: 주어진 λ¬Έμžμ—΄λ‚΄μ— 일치λ₯Ό μƒˆλ‘œμš΄ λ¬Έμžμ—΄λ‘œ λŒ€μΉ˜ν•˜λŠ” λ©”μ„œλ“œ
// ex1: 곡백 μ œκ±°ν•˜κΈ°
const str =
  "λ‚˜λžλ§μ‹Έλ―Έ 듕귁에 λ‹¬μ•„λ¬Έμžμ™€λ‘œ μ„œλ₯΄ 사맛디 μ•„λ‹ˆν• μŽ„ 이런 μ „μ°¨λ‘œ μ–΄λ¦° 백셩이 λ‹ˆλ₯΄κ³ μ Έ 홇베이셔도 λ§ˆμ°Έλ„€ 제 λœ¨λ“€ μ‹œλŸ¬νŽ΄λ”” λͺ―핧 λ…Έλ―Έν•˜λ‹ˆμ•„ λ‚΄ μ΄λž„ μœ™ν•˜μ•Ό μ–΄μ—ΏλΉ„λ„ˆκ²¨ μƒˆλ‘œ 슀믈 μ—¬λ“« μ§œλž„ λ§Ήκ°€λ…Έλ‹ˆμ‚¬λžŒλ§ˆλ‹€ ν•΄μ—¬ μˆ˜λΉ„λ‹ˆκ²¨ λ‚ λ‘œ μ‘€λ©” λ»”ν•œν‚ˆ ν•˜κ³ μ Έ ν• λ”°λΌλ―Έλ‹ˆλΌ";
const result = str.replace(/\s/g, "")

console.log('result :>> ', result);
πŸ‘‰πŸ½ λ‚˜λžλ§μ‹Έλ―Έλ“•κ·μ—λ‹¬μ•„λ¬Έμžμ™€λ‘œμ„œλ₯΄μ‚¬λ§›λ””μ•„λ‹ˆν• μŽ„μ΄λŸ°μ „μ°¨λ‘œμ–΄λ¦°λ°±μ…©μ΄λ‹ˆλ₯΄κ³ μ Έν™‡λ² μ΄μ…”λ„λ§ˆμ°Έλ„€μ œλœ¨λ“€μ‹œλŸ¬νŽ΄λ””λͺ―ν•§λ…Έλ―Έν•˜λ‹ˆμ•„λ‚΄μ΄λž„μœ™ν•˜μ•Όμ–΄μ—ΏλΉ„λ„ˆκ²¨μƒˆλ‘œμŠ€λ―ˆμ—¬λ“«μ§œλž„λ§Ήκ°€λ…Έλ‹ˆμ‚¬λžŒλ§ˆλ‹€ν•΄μ—¬μˆ˜λΉ„λ‹ˆκ²¨λ‚ λ‘œμ‘€λ©”λ»”ν•œν‚ˆν•˜κ³ μ Έν• λ”°λΌλ―Έλ‹ˆλΌ

// ex2: 특수문자 μ œκ±°ν•˜κΈ°
let s = "found7, time: study; Yduts; emit, 7Dnuof";
let notIncludeSpecialCharacter = s.replace(/[^A-z]/g, '');
πŸ‘‰πŸ½ foundtimestudyYdutsemitDnuof

// ex3: 특수문자 μ€‘μ—μ„œ 곡백은 살리고 싢을 λ•Œ
let notIncludeSpecialCharacter = s.replace(/[^A-z | " "]/g, '');
πŸ‘‰πŸ½ found time study yduts emit dnuof

μ§€κΈˆκΉŒμ§€ μ •κ·œν‘œν˜„μ‹μ˜ κ°œλ…κ³Ό μ‘μš© 예제λ₯Ό κ°„λž΅ν•˜κ²Œ μ‚΄νŽ΄λ³΄μ•˜λ‹€. 처음 μ •κ·œν‘œν˜„μ‹μ„ μ ‘ν–ˆμ„ 땐 도톡 이해가 λ˜μ§€ μ•Šμ€ λ¬Έλ²•μ΄μ—ˆλŠ”λ°, λͺ‡ 번 μ‚¬μš©ν•΄ λ²„λ¦‡ν•˜λ‹ˆκΉŒ 반볡문, 쑰건문보닀 μ΄μš©ν•˜κΈ°κ°€ 쉽고 νŽΈν–ˆλ‹€. μ‘°κΈˆμ”© μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λ©° κ²½ν—˜μ„ μŒ“κ³  λ‚˜μ€‘μ— ν˜„μ—…μ— λ„μž…ν•˜κ²Œ 되면 예제λ₯Ό κΉŒλ¨Ήμ§€ μ•Šλ„λ‘ 기둝해둬야겠닀.

 

Reference

  1. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp
  2. https://ko.javascript.info/regexp-introduction
  3. https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=251552545
  4. https://emailregex.com/
  5. https://html.spec.whatwg.org/multipage/input.html#input.email.attrs.value.multiple
λ°˜μ‘ν˜•