Post

πŸ₯œ [JavaScript] μ •κ·œν‘œν˜„μ‹μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž

κ°œμš”

μ—¬νƒœκ» μ •κ·œν‘œν˜„μ‹μ€ validation 을 μ μš©ν•  λ•Œ 밖에 써보지 μ•Šμ•˜λ‹€.

ν•˜μ§€λ§Œ μš”μ¦˜ javascript 둜 μ½”λ”©ν…ŒμŠ€νŠΈλ₯Ό μ€€λΉ„ν•˜λ‹€ 보면

μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λŠ” 일이 μž¦μ€ 것 κ°™μ•„ μ œλŒ€λ‘œ μ•Œμ•„λ³΄λ € ν•œλ‹€.



μ •κ·œν‘œν˜„μ‹μ΄λž€?

μ •κ·œν‘œν˜„μ‹ (RegExp, Regular Expression)

문자λ₯Ό κ²€μƒ‰ν•˜κ±°λ‚˜ λŒ€μ²΄, μΆ”μΆœ ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μΌμ’…μ˜ νŒ¨ν„΄

μ‰½κ²Œ 말해 λ¬Έμžμ—΄μ— μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆλŠ” νŒ¨ν„΄μ΄λΌκ³  보면 λœλ‹€.



μ‚¬μš© 방법

μ •κ·œν‘œν˜„μ‹μ€ 크게 두 가지 방법이 μžˆλŠ”λ° μƒμ„±μž 방식과 λ¦¬ν„°λŸ΄ 방식이 μžˆλ‹€.

1
2
3
4
5
6
7
8
9
// 1. μƒμ„±μž 방식

new RegExp("ν‘œν˜„", "μ˜΅μ…˜");
new RegExp("[a-z]", "gi");

// 2. λ¦¬ν„°λŸ΄ 방식

/ν‘œν˜„/μ˜΅μ…˜
/[a-z]/gi

μ—¬κΈ°μ„œ λ¨Όμ € μƒμ„±μž λ°©μ‹μœΌλ‘œ μ•Œμ•„λ³΄μž

μƒμ„±μž 방식

1
2
3
4
5
6
7
8
9
10
11
const str = `
010-1234-5678
thesecond@gmail.com
hello world!
https://ezurno.github.io/
The quick brown fox jumps over the lazy dog.
`;

const reg = new RegExp("the", "");
// 변경이 될 λΆ€λΆ„
console.log(str.match(reg));

μ΄λŸ¬ν•œ ν•¨μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€κ³  치자

ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό λ™μž‘μ‹œν‚€λ©΄ μ½˜μ†”μ—μ„œλŠ”

1
["the", index: 15, input: ~~~~] //[`찾은 κ°’`, `κ°’μ˜ μœ„μΉ˜`, `μž…λ ₯ν•œ κ°’`]

μ΄λ ‡κ²Œ λ‘œκ·Έκ°€ μ°ν˜€λ‚˜μ˜€λŠ”λ° 각각 찾은 κ°’, κ°’μ˜ μœ„μΉ˜, μž…λ ₯ν•œ κ°’ 으둜

λ°°μ—΄ λ°μ΄ν„°λ‘œ λ‚˜νƒ€λ‚œλ‹€.

그럼 μ΄λ²ˆμ—” μ˜΅μ…˜ 데이터에 g λ₯Ό μΆ”κ°€ ν•΄λ³΄μž

1
2
3
4
5
6
const reg = new RegExp("the", "g");
console.log(str.match(reg));

// ["the", "the"]
// 맀칭 된 데이터듀을 λ°°μ—΄λ‘œ λ°˜ν™˜
//  단 λŒ€μ†Œλ¬Έμž ꡬ별을 ν•˜λ―€λ‘œ The λŠ” λ§€μΉ­λ˜μ§€ μ•ŠμŒ

그럼 μ΄λ²ˆμ—” λŒ€μ†Œλ¬Έμž ꡬ뢄을 ν•˜μ§€ μ•Šμ„λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?

κ°„λ‹¨ν•˜κ²Œ μ˜΅μ…˜ 데이터에 i λ₯Ό μΆ”κ°€ν•˜λ©΄ λœλ‹€.

1
2
3
4
5
const reg = new RegExp("the", "gi");
console.log(str.match(reg));

// ["the", "The", "the"]
// 맀칭 된 데이터듀을 λ°°μ—΄λ‘œ λ°˜ν™˜



λ¦¬ν„°λŸ΄ 방식

μ΄λŸ¬ν•œ μ •κ·œν‘œν˜„μ‹μ„ 생성할 λ•Œ, λ¦¬ν„°λŸ΄ 방식을 μ‚¬μš©ν•˜λ©΄ 더 κ°„λ‹¨ν•˜κ²Œ

μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

1
2
3
4
5
// 1) const reg = new RegExp("the", "g");
const reg = /the/g;

// 2) const reg = new RegExp("the", "gi");
const reg = /the/gi;

그럼 μ΄λ²ˆμ—λŠ” μ •κ·œν‘œν˜„μ‹μ—μ„œ 주둜 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ•Œμ•„λ³΄μž



μ •κ·œν‘œν˜„μ‹ ν•¨μˆ˜

자주 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λŠ” 크게 3가지가 μžˆλ‹€.

testmatchreplace
μΌμΉ˜μ—¬λΆ€ λ°˜ν™˜μΌμΉ˜ν•˜λŠ” 문자 λ°°μ—΄ λ°˜ν™˜μΌμΉ˜ν•˜λŠ” 문자λ₯Ό λŒ€μ²΄
μ •κ·œμ‹λ¬Έμžμ—΄λ¬Έμžμ—΄

test λŠ” μ •κ·œμ‹μ— μ‚¬μš©ν•˜κ³ 

match, replace λŠ” λ¬Έμžμ—΄μ— μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
const str = `
010-1234-5678
thesecond@gmail.com
hello world!
https://ezurno.github.io/
The quick brown fox jumps over the lazy dog.
`;

const reg = /fox/gi;
console.log(reg.test(str)); // false
console.log(str.match(reg)); // ["fox"]
console.log(str.replace(reg, "cat")); // fox λ₯Ό cat 으둜 ꡐ체



ν”Œλž˜κ·Έ

μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•  λ•Œ μ˜΅μ…˜ 데이터에 μΆ”κ°€ν•˜λŠ” κ°’

μ΄λŸ¬ν•œ ν”Œλž˜κ·Έμ—λŠ” 3가지가 μžˆλ‹€.

gim
λͺ¨λ“  문자 μΌμΉ˜μ˜μ–΄ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  μΌμΉ˜μ—¬λŸ¬μ€„ 일치, 각각 쀄을 μ‹œμž‘κ³Ό 끝으둜 인식


ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜κΈ° 전에 λ¨Όμ € escape-character 에 λŒ€ν•΄ μ•Œμ•„λ³΄κ³  λ“€μ–΄κ°€λ €ν•œλ‹€.

escape-character

μ •κ·œμ‹μ΄ 가지고 μžˆλŠ” 기본적인 κΈ°λŠ₯을 νƒˆμΆœν•΄ λ¬Έμžλ‘œμ„œμ˜ κΈ°λŠ₯λ§Œμ„ μ‚¬μš©ν•˜λŠ” 문자

μ‹œμž‘μœΌλ‘œλŠ” \, λμœΌλ‘œλŠ” $ λ₯Ό μ‚¬μš©ν•΄ λ‚˜νƒ€λ‚Έλ‹€.

1
2
3
// \$ λ₯Ό μ‚¬μš©
console.log(str.match(/\.$/gi));
// . 을 μ°ΎλŠ”λ‹€λŠ” 의미
1
2
3
4
5
6
7
8
9
10
11
12
13
const str = `
010-1234-5678
thesecond@gmail.com
hello world!
https://ezurno.github.io/
The quick brown fox jumps over the lazy dog.
`;

console.log(str.match(/the/)); // the 의 인덱슀 및 정보 λ°°μ—΄
console.log(str.match(/the/g)); // the 일치
console.log(str.match(/the/gi)); // λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  the 와 일치
console.log(str.match(/\.$/gi)); // μ΄μŠ€μΌ€μ΄ν”„ κ°’μœΌλ‘œ . 을 찾음
console.log(str.match(/\.$/gim)); // 쀄을 λ‚˜λˆ μ„œ . 을 찾음



νŒ¨ν„΄

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
^ab     // 쀄 μ‹œμž‘μ— μžˆλŠ” ab 와 일치
ab$     // 쀄 끝에 μžˆλŠ” ab 와 일치
.       // μž„μ˜μ˜ ν•œ λ¬Έμžμ™€ 일치
a|b     // a λ˜λŠ” b 와 일치
ab?     // b κ°€ μ—†κ±°λ‚˜ b 와 일치
{3}     // 3개 연속 일치
{3, }   // 3개 이상 연속 일치
{3, 5}  // 3개 이상 5개 μ΄ν•˜ 일치
+       // 1회 이상 연속 일치 {1, }

[ab]    // a λ˜λŠ” b
[a-z]   // a λΆ€ν„° z κ°„μ˜ 문자 ꡬ간에 일치
[A-Z]   // A λΆ€ν„° Z κ°„μ˜ 문자 ꡬ간에 일치
[0-9]   // 0 λΆ€ν„° 9 κΉŒμ§€μ˜ 숫자 ꡬ간에 일치
[κ°€-힣] // ν•œκΈ€

\w      // 63 개의 문자(λŒ€μ†Œμ˜λ¬Έ 52개 + 숫자 10개 + _)와 일치
\b      // 64 개의 λ¬Έμžμ™€ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 문자 경계 (boundary)
\d      // μˆ«μžμ— 일치 (digit)
\s      // 곡백 (space, tab) 등에 일치

(?:)    // κ·Έλ£Ή 지정
(?=)    // μ•žμͺ½ 일치
(?<=)   // λ’·μͺ½ 일치

등이 μžˆλ‹€.

λ§ˆμΉ˜λ©°β€¦

μ •κ·œν‘œν˜„μ‹β€¦ 생각보닀 μ“°κΈ°λŠ” νŽΈν•΄μ„œ μ’‹μ•˜λŠ”λ°

ν‰μ†Œμ— 보지 λͺ»ν–ˆλ˜ 문법도 처음 보게 λ˜μ–΄ 생각보닀 λ””ν…ŒμΌ ν•˜λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

μ•žμœΌλ‘œ μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•΄μ„œ λ¬Έμžμ—΄μ„ μ’€ 더 μ‰½κ²Œ

관리할 수 μžˆμ„ 것 κ°™λ‹€. νŽΈν•˜λ„€

This post is licensed under CC BY 4.0 by the author.